Очень новичок в математике свойств ... Я пытаюсь :
Get-WMIObject win32_diskdrive -computer $poste | Add-Member -MemberType ScriptProperty -Name GB -Value {[int]($_.size/1GB)} -PassThru | select model, size,GB
и я думаю, что ссылаюсь на свойство SIZE неправильно, потому что получаю:
model size GB
----- ---- --
Corsair Neutron XTI SSD SCSI Disk Device 480101368320 0
ST350041 3AS SCSI Disk Device 500105249280 0
Что я делаю неправильно? Спасибо
Сделайте это как явный ForEach-Object:
Get-WMIObject win32_diskdrive | %{Add-Member -Input $_ -MemberType ScriptProperty -Name GB -Value {[int]($_.size/1GB)} -PassThru} | select model, size,GB
Вы можете использовать Expression
в своем операторе select для расчета размера в ГБ.
Бывший:
Get-WMIObject win32_diskdrive -computer $poste | Select @{Label = "Model";Expression = {$_.Model}},
@{Label = "Size";Expression = {"{0:N1}" -f($_.Size) }},
@{Label = "Total Capacity (GB)";Expression = {"{0:N1}" -f( $_.Size / 1gb)}} #This will devide size by 1gb
Поскольку вы не меняете свойства модели / размера, вы можете просто выбрать их как обычно: Get-WmiObject Win32_DiskDrive -ComputerName $poste | Select Model,Size,@{Label = "GB";Expression = {[int]($_.Size / 1gb)}}
-f - это Оператор формата строки. 0: N1 - дескриптор формата.
"{0:N1}" -f
используется для ограничения количества десятичных знаков, например, для замены 465.759308338165
на 466
. Он используется здесь, поскольку результат не передается на [int]
(который дает тот же результат).
@JamesC. Это не совсем то же самое. {0: N1} будет иметь 1 десятичную точку. Приведение к [int] - нет.
@EBGreen Да, я бы неправильно прочитал как 0:N0
(что было бы намерением OP, глядя на их код)
Это выражение немного проще:
Get-WMIObject win32_diskdrive | select model, size,@{n = "GB";e = {[int]($_.size/1GB)}}
И это тоже работает.
И, поскольку будущее за CIM; Get-CimInstance CIM_DiskDrive | Select-Object -Property model, size,@{n = "GB";e = {[int]($_.Size/1GB)}}
Хороший способ, но я запутался, что такое 0: N1 и -f?