Не удается выбрать конкретный столбец в Get-Диске

#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 в качестве нового столбца. как это сделать?