2014-05-05 23 views
0

如果驅動器的可用空間爲100%空閒,並且將最小閾值空間設置爲25%,則腳本不正確報告驅動器低於閾值。意味着100 儘管如果我要用 替換 $ FreePercent =「{0:N0}」-f(100 * $ objDisk.FreeSpace/$ objDisk.Size)$ FreePercent =(100 * $ objDisk.FreeSpace/$ objDisk .Size)... 我得到正確的結果。 我如何解決舍入問題。 這裏是我的代碼使用powershell返回服務器上所有驅動器的可用空間

# For Loop - get % free space of all drives 
#Define Variables 
$Notify = 0 
$MinFreePercent = "25" 
#$FileDriveSpace = "c:\temp\DriveSpace.txt" 
$ComputerName = $(Get-WmiObject Win32_Computersystem).name 
$OutArray = @() 

$outarray += "Disk space Alerts and Utilizations on server $ComputerName" 
$AllDisks = get-wmiobject Win32_LogicalDisk -Filter 「DriveType = 3" 
#Omit the a, b drives if exist 
$AllDisks = $AllDisks | ? { $_.DeviceID -notmatch "[ab]:"} 
foreach ($objdisk in $AllDisks) 
{ 
    #$FreePercent = "{0:P0} " -f ($objDisk.FreeSpace/$objDisk.Size) 
    $FreePercent = "{0:N0}" -f (100 * $objDisk.FreeSpace/$objDisk.Size) 


    If ($FreePercent -lt $MinFreePercent) 
     { 
     $Threshold = "Threshold Reached" 
     $Notify = 1 
     } 
    Else 
     { $Threshold = "N/A"} 

    $DeviceId = $objDisk.DeviceID 
    $myobj = "" | Select "Drive","PercentFreeSpace", "Threshold" 
    $myobj.Drive = $DeviceId 
    $myobj.PercentFreeSpace = $FreePercent 
    $myobj.Threshold = $Threshold 

    $outLine = $DeviceId + " " + $FreePercent + " " + $Threshold + " " + $MinFreePercent 
    $outLine 

    #Add the object to the out-array 
    $outarray += $myobj 
    #Wipe the object just to be sure 
    $myobj = $null 
} 

回答

0

所以這裏的問題是-f或格式化操作。這是把你的真棒驅動器免費百分之[int]並把它變成一個普通的舊無聊[string]。我親自使用[math]加速器並調用圓形方法。

[math]::Round($mynumber,0)

你也可以通過在TechNet庫尋找這種類型的東西保存自己一些時間: http://gallery.technet.microsoft.com/Get-HardDrive-0eef638f

我不記得是否該版本將數據返回字符串或整數但是你會看到一個循環方法的例子。

+0

謝謝傑森。這解釋了它 – user975893

相關問題