0

スクリプトを実行してサーバーのドライブにクエリを実行し、ディスクスペースの結果を返します。スクリプトは、この質問のサーバーのテキストファイルリストを使用して実行されます。txtファイルにはサーバー名が1つしかないため、最終的に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 \ root \ cimv2:Win32_LogicalDisk.DeviceID = "C:" \ db- server01 \ root \ cimv2:Win32_LogicalDisk.DeviceID = "V:" \ db-server01 \ root \ 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が失われます。

???????

4

2 に答える 2

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++  
}

}

于 2012-12-04T15:28:51.750 に答える
0

私は実際にこれが起こっている理由を理解しました - これは

$percentWarning = 90;

そのうち、ドライブの空き容量が 90% 未満の場合にのみ成功するように出力を指示する場所 - 一部のサーバーは空き容量の値がはるかに高く、確かにこれはそうでした - そのドライブについて報告していませんでした。その後、値を 99% に編集し、すべてのドライブを再びピックアップしました

于 2012-11-15T16:17:17.957 に答える