检查磁盘Powershell
问题描述:
我正在创建一个应该检查计算机上所有驱动器的可用磁盘空间的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 **,现在修复:) –