Во-первых, будьте осторожны с командлетами Format
. Они должны использоваться только в самом конце и не сохраняться в переменной.
Ваш командлет New-Object
также не ссылается на переменную $diskinfo
. Так что $_.DeviceID
будет неопределенным, потому что по конвейеру ничего не передается.
Также не нужны дополнительные операторы подвыражений $()
.
Мне лично нравится ускоритель типа [pscustomobject]
, использующий New-Object
, так как он более читабелен.
function Get-DiskPercentFree {
[CmdletBinding(ConfirmImpact = 'Low')]
param (
[string]$ServerName
)
$DiskInfo = Get-WmiObject Win32_LogicalDisk -ComputerName $($ServerName) -Filter DriveType=3
[PSCustomObject]@{
'ServerName' = $ServerName
'DeviceID' = $DiskInfo.DeviceID
'Size (GB)' = [math]::Truncate($DiskInfo.Size / 1GB)
'Freespace (GB)' = [math]::Truncate($DiskInfo.FreeSpace / 1GB)
'Percent Free' = [math]::Round(($DiskInfo.FreeSpace / $DiskInfo.Size) * 100)
}
}
Get-DiskPercentFree "DevServerName"
Наконец, вы пробовали командовать Get-Volume
?