我正在运行脚本来查询服务器的驱动器以恢复磁盘空间结果。该脚本运行使用文本文件服务器列表的这个问题,我只有一个服务器名称在txt文件中,并最终生成一个HTML文件。Foreach循环在运行时缺少结果
问题出现是因为当我使用此脚本的第三个示例时 - 它不会为服务器带回正确数量的驱动器。 所以为了测试这一点,我做了以下内容:
测试1.
Get-WmiObject
-ComputerName DB-server01
-Class Win32_LogicalDisk
-Filter "DriveType = 3"
结果:
DeviceID : C:
DriveType : 3
ProviderName :
FreeSpace : 28575797248
Size : 146056146944
VolumeName : OS
DeviceID : V:
DriveType : 3
ProviderName :
FreeSpace : 814725959680
Size : 898316103680
VolumeName : SQLData
DeviceID : W:
DriveType : 3
ProviderName :
FreeSpace : 293852868608
Size : 299436601344
VolumeName : SQLLogs
测试2.
$computers = Get-Content "C:\Powershell\servers.txt";
write-host $computers
foreach($computer in $computers)
{
$disks = Get-WmiObject
-ComputerName $computer
-Class Win32_LogicalDisk
-Filter "DriveType = 3"
write-host $disks
}
结果
DB-SERVER01
\ DB-SERVER01 \根\ CIMV2:Win32_LogicalDisk.DeviceID = “C:” \ DB- SERVER01 \根\ CIMV2:Win32_LogicalDisk.DeviceID = “V” \ DB-SERVER01 \根\ CIMV2:Win32_LogicalDisk.DeviceID = “W:”
测试3.
$i = 0;
$percentWarning = 90;
$percentCritcal = 25;
$computers = Get-Content "C:\Powershell\servers.txt";
write-host $computers
foreach($computer in $computers)
{
$disks = Get-WmiObject
-ComputerName $computer
-Class Win32_LogicalDisk
-Filter "DriveType = 3"
$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;
if($percentFree -lt $percentWarning)
{
$color = $greenColor
if($percentFree -lt $percentCritcal)
{
$color = $redColor
}
if ($percentFree -eq "NaN")
{
$PercentFree = "N/A"
$Color = $whiteColor
}
Add-Content $diskReport $dataRow;
Write-Host -ForegroundColor Green
"$computer $deviceID percentage free space = $percentFree";
$i++
}
}
}
结果:
DB-Server01 C: percentage free space = 19.56
当通过外观测试3只运行带回驱动器C而无缘V & W.
???????
伊夫其实明白了为什么这种情况正在发生 - 这是由于$ percentWarning = 90; $ percentCritcal = 25;如果驱动器的可用空间少于90%,某些服务器具有更高的空间免费价值,并且肯定这样做 - 所以它不告知驱动器,只有在告诉输出才能成功的情况下。我编辑了99%的值,然后再次拾取所有驱动器 – MoOriginal