#powershell
Вопрос:
У меня есть следующие данные в файле csv
"Server","Disk ###","Status","Size","Free"
"s1","Disk 0","Online","100 GB","1024 KB"
"s1","Disk 1","Online","6144 MB","1024 KB"
"s1","Disk 2","Online","200 GB","1024 KB"
"s1","Disk 3","Online","10 GB","1024 KB"
ожидаемый:
"Server","Disk ###","Status","Size","Free", "Total Size"
"s1","Disk 0","Online","100 GB","1024 KB","100 GB"
"s1","Disk 1","Online","6144 MB","1024 KB","60 GB"
"s1","Disk 2","Online","200 GB","1024 KB","100 GB"
"s1","Disk 3","Online","10 GB","1024 KB","2.44 TB"
Я хочу добавить к этому столбец общего размера с помощью команды Get-Disk
но я не могу выбрать столбец
Я попытался использовать, как показано ниже
Get-Disk | Select-Object Total Size
Get-Disk | Select-Object 'Total Size'
Но это дает пустой вывод.
Пожалуйста, дайте мне знать, в чем проблема
попробовал, как показано ниже
$dataa= Get-Disk | Select-Object -Property @{n="TotalSize";e={'{0:n2} GB' -f ($_.Size / 1GB)}} | ft
Import-Csv -path c:infile.csv |
Select-Object *,@{Name='TotalSize';Expression={$dataa}} |
Select-Object "Server","Disk ###","Status","Size","Free", "TotalSize" |
Export-Csv -path C:Outfile.csv -NoTypeInformation
Получение таких данных, как
"Server","Disk ###","Status","Size","Free","TotalSize"
"s1","Disk 0","Online","100 GB","1024 KB","Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.GroupEndData Microsoft.PowerShell.Commands.Internal.Format.FormatEndData"
"s1","Disk 1","Online","6144 MB","1024 KB","Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.GroupEndData Microsoft.PowerShell.Commands.Internal.Format.FormatEndData"
"s1","Disk 2","Online","200 GB","1024 KB","Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.GroupEndData Microsoft.PowerShell.Commands.Internal.Format.FormatEndData"
"s1","Disk 3","Online","10 GB","1024 KB","Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.GroupEndData Microsoft.PowerShell.Commands.Internal.Format.FormatEndData"
Комментарии:
1. Настоящее название объекта недвижимости —
Size
:Get-Disk |% Size
Ответ №1:
При Get-Disk
выводе он выполняет некоторое форматирование для отображения в приятном макете. Однако на самом деле он не обладает всеми свойствами, указанными в выходных данных по умолчанию.
Чтобы увидеть реально существующие свойства, выполните:
Get-Disk 0 | Format-List *
Единственными свойствами, связанными с размером, которые вы, вероятно, увидите, являются AllocatedSize
и Size
. Если вы посмотрите документ MS doc для возвращаемого класса CIM MSFT_Disk Get-Disk
, вы увидите, что AllocatedSize
это «Объем пространства в байтах, который в настоящее время используется на диске». и « Size
Общий размер диска в байтах».
Итак, чтобы получить что-то подобное вашим выводам, вам понадобится что-то вроде:
Get-Disk |
Select-Object -Property @{n='Server';e={hostname}},
@{n='Disk ###';e={'Disk {0}' -f $_.Number}},
@{n='Status';e={$_.OperationalStatus}},
@{n='Size';e={'{0:n2} GB' -f ($_.AllocatedSize / 1GB)}},
@{n='Free';e={'{0:n2} GB' -f (($_.Size - $_.AllocatedSize)/1GB)}},
@{n='TotalSize';e={'{0:n2} GB' -f ($_.Size / 1GB)}} |
ConvertTo-Csv -NoTypeInformation
Комментарии:
1. Спасибо за ваш ответ. Данные для первых 4 столбцов у меня уже есть в формате csv. Мне нужно добавить вывод
@{n='TotalSize';e={'{0:n2} GB' -f ($_.Size / 1GB)}} | ConvertTo-Csv -NoTypeInformation
в существующий csv в качестве нового столбца. как это сделать?