2016-07-25 88 views
0

我正在創建一個應該檢查計算機上所有驅動器的可用磁盤空間的PowerShell程序。我發現了檢查磁盤Powershell

Get-WmiObject Win32_logicaldisk |Format-Table DeviceID, freeSpace, Size 

它生成我想要在表中的數據。

但是我不知道如何使用公式和程序的其他部分中的每個特定元素。

最終,我想檢查計算機上的每個磁盤,看它是否超過50%空閒,並相應地發出輸出。

謝謝!

回答

1

千萬不要在之前使用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)" 
    } 
} 
+0

一切看起來都不錯,除了寫主機行只顯示「有超過驅動器上有50%的可用磁盤空間「,並沒有指定哪個驅動器 – tlotr856

+0

這只是因爲我的胖手指不能拼寫** DeviceID **,現在修復:) –

0

試試這個

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