我正在创建一个powershell程序,它应该检查计算机上所有驱动器的可用磁盘空间。我找到了
Get-WmiObject Win32_logicaldisk |Format-Table DeviceID, freeSpace, Size
在表格中生成我想要的数据。
但是我不确定如何在公式和程序的其他部分中使用每个特定元素。
最终,我想检查计算机上的每个磁盘,看看它是否超过50%,并相应地发出输出。
谢谢!
答案 0 :(得分: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)"
}
}
答案 1 :(得分: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