2016-07-25 101 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