Powershell - 排除 P:从 foreach 循环驱动
Powershell - Exclude P: Drive from foreach loop
我有一个脚本,它遍历服务器的文本文件并报告可用磁盘 space 低于 25% 和 10%。但是有些服务器有一个用于页面文件的 P: 驱动器,因此我希望循环忽略这个驱动器。
这是循环部分:
# Start processing disk space reports against a list of servers
foreach($computer in $computers)
{
$disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3" -EA SilentlyContinue
$computer = $computer.toupper()
foreach($disk in $disks)
{
$deviceID = $disk.DeviceID;
$volName = $disk.VolumeName;
[float]$size = $disk.Size;
[float]$freespace = $disk.FreeSpace;
$percentFree = [Math]::Round(($freespace / $size) * 100, 2);
$sizeGB = [Math]::Round($size / 1073741824, 2);
$freeSpaceGB = [Math]::Round($freespace / 1073741824, 2);
$usedSpaceGB = $sizeGB - $freeSpaceGB;
$color = $whiteColor;
我对 powershell 的了解非常基础,所以如果能提供语法方面的帮助以及如何排除 P: 驱动器,我们将不胜感激
向 WMI 筛选器添加条件以排除具有 DeviceID = P:
:
的卷
$disks = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType = 3 AND DeviceID != 'P:'" -ComputerName $computer -EA SilentlyContinue
或者,使用 Where-Object
:
过滤 $disks
集合
foreach($disk in $disks |Where-Object {$_.DeviceID -ne 'P:'})
{
# ...
}
我有一个脚本,它遍历服务器的文本文件并报告可用磁盘 space 低于 25% 和 10%。但是有些服务器有一个用于页面文件的 P: 驱动器,因此我希望循环忽略这个驱动器。
这是循环部分:
# Start processing disk space reports against a list of servers
foreach($computer in $computers)
{
$disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3" -EA SilentlyContinue
$computer = $computer.toupper()
foreach($disk in $disks)
{
$deviceID = $disk.DeviceID;
$volName = $disk.VolumeName;
[float]$size = $disk.Size;
[float]$freespace = $disk.FreeSpace;
$percentFree = [Math]::Round(($freespace / $size) * 100, 2);
$sizeGB = [Math]::Round($size / 1073741824, 2);
$freeSpaceGB = [Math]::Round($freespace / 1073741824, 2);
$usedSpaceGB = $sizeGB - $freeSpaceGB;
$color = $whiteColor;
我对 powershell 的了解非常基础,所以如果能提供语法方面的帮助以及如何排除 P: 驱动器,我们将不胜感激
向 WMI 筛选器添加条件以排除具有 DeviceID = P:
:
$disks = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType = 3 AND DeviceID != 'P:'" -ComputerName $computer -EA SilentlyContinue
或者,使用 Where-Object
:
$disks
集合
foreach($disk in $disks |Where-Object {$_.DeviceID -ne 'P:'})
{
# ...
}