здесь несколько иной подход.требуется, чтобы вы завернули следующий код в блок скриптов и затем использовали Invoke-Command
для его запуска на целевых системах.если вы не можете заставить это работать, пожалуйста, дайте мне знать ... [ ухмылка ]
# if you have no locally mapped/subst-ed drive letters, remove this section
$SubstLocalDiskList = @(subst.exe |
ForEach-Object {
$_[0]
})
$DiskList = Get-PSDrive -PSProvider FileSystem |
Where-Object {
# read-only drives will show "0" used & "0" free
$_.Free -gt 0 -and
$_.Used -gt 0 -and
# if you have no locally mapped/subst-ed drive letters, remove this line
$_.Name -notin $SubstLocalDiskList
}
$FreeWarning_Pct = 10
$TempPropTable = [ordered]@{
ComputerName = $env:COMPUTERNAME
}
foreach ($DL_Item in $DiskList)
{
$Size = $DL_Item.Used + $DL_Item.Free
$SizeFree_Pct = [math]::Round($DL_Item.Free / $Size * 100, 2)
if ($SizeFree_Pct -ge $FreeWarning_Pct)
{
$SFP_Status = 'OK'
}
else
{
$SFP_Status = '__ Low __'
}
$TempPropTable.Add('{0}_Drive' -f $DL_Item.Name, $DL_Item.Name)
$TempPropTable.Add('{0}_Size_GB' -f $DL_Item.Name, [math]::Round($Size / 1GB, 2))
$TempPropTable.Add('{0}_Free_Pct' -f $DL_Item.Name, $SizeFree_Pct)
$TempPropTable.Add('{0}_SFP_Status' -f $DL_Item.Name, $SFP_Status)
}
[PSCustomObject]$TempPropTable
усеченный вывод для одной системы ...
ComputerName C_Drive C_Size_GB C_Free_Pct C_SFP_Status D_Drive D_Size_GB D_Free_Pct D_SFP_Status E_Drive [*...snip...*]
------------ ------- --------- ---------- ------------ ------- --------- ---------- ------------ ------- [*...snip...*]
[MySysName] C 931.41 79.22 OK D 930.57 49.68 OK E [*...snip...*]