我正在运行一个脚本来查询服务器的驱动器以恢复磁盘空间结果。该脚本使用文本文件列表服务器运行此问题我在txt文件中只有一个服务器名称,并最终构建一个html文档。
出现问题是因为当我使用此脚本的第3个示例时 - 它不会为服务器带回正确数量的驱动器。 所以为了测试这个,我做了以下几点:
测试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 \ root \ 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上。
???????
答案 0 :(得分:1)
我遇到了同样的问题,发现确实没有显示磁盘,因为脚本正在跳过有足够磁盘空间的磁盘。如果要显示所有磁盘,则必须调整脚本。问题是磁盘没有正确放置“}”而没有出现问题。 如果百分比低于警告级别
,则仅打印脚本您可以将最后一位更改为:
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++
}
}
答案 1 :(得分:0)
我实际上已经意识到为什么会这样 - 这是由于
$ percentWarning = 90;
如果驱动器的可用空间少于90%,那么告诉输出只能成功 - 某些服务器具有更高的空间自由价值,当然这一点确实如此 - 所以它没有报告该驱动器。我已将该值编辑为99%并再次获取所有驱动器