我正在創建一個應該檢查計算機上所有驅動器的可用磁盤空間的PowerShell程序。我發現了檢查磁盤Powershell
Get-WmiObject Win32_logicaldisk |Format-Table DeviceID, freeSpace, Size
它生成我想要在表中的數據。
但是我不知道如何使用公式和程序的其他部分中的每個特定元素。
最終,我想檢查計算機上的每個磁盤,看它是否超過50%空閒,並相應地發出輸出。
謝謝!
我正在創建一個應該檢查計算機上所有驅動器的可用磁盤空間的PowerShell程序。我發現了檢查磁盤Powershell
Get-WmiObject Win32_logicaldisk |Format-Table DeviceID, freeSpace, Size
它生成我想要在表中的數據。
但是我不知道如何使用公式和程序的其他部分中的每個特定元素。
最終,我想檢查計算機上的每個磁盤,看它是否超過50%空閒,並相應地發出輸出。
謝謝!
千萬不要在之前使用Format-*
cmdlet 這一點,您需要在這一點上進行實際格式化並將數據呈現給用戶。
抓住一個對象的屬性,而無需格式化,使用Select-Object
:
$DiskInfo = Get-WmiObject Win32_logicaldisk |Select-Object DeviceID,FreeSpace,Size
要獲得的可用空間的百分比,你可以使用a calculated property:
$DiskInfo = Get-WmiObject Win32_logicaldisk |Select-Object DeviceID,@{L="FreeSpacePercentage";E={100*($_.FreeSpace/$_.Size)}},FreeSpace,Size
由於Get-WmiObject Win32_LogicalDisk
返回一個對象每個磁盤,$DiskInfo
現在是一個具有您選擇的確切4個屬性的對象數組。
迭代有一個環形或ForEach-Object
cmdlet,並輸出相應的陣列上:
$DiskInfo |ForEach-Object {
if($_.FreeSpacePercentage -gt 50){
Write-Host "There's more than 50% free disk space on drive $($_.DeviceID)"
}
}
試試這個
Get-WmiObject Win32_Volume -computername $env:computername |
Select-Object DriveType, @{Name="Size(GB)";Expression={"{0:N1}" -f($_.Capacity/1gb)}},@{Name="FreeSpace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}},@{Name="FreeSpacePerCent";Expression={"{0:N0}" -f(100*$_.freespace/$_.capacity)}} |
Where-Object -FilterScript {[decimal]$_.FreeSpacePerCent -gt 50 -and $_.drivetype -eq 3} |
Sort-Object -property "FreeSpacePerCent"
Format-Table
一切看起來都不錯,除了寫主機行只顯示「有超過驅動器上有50%的可用磁盤空間「,並沒有指定哪個驅動器 – tlotr856
這只是因爲我的胖手指不能拼寫** DeviceID **,現在修復:) –