我想拉我們的ESX場中的Windows 7機器的所有C:\驅動器使用情況的報告。我的初始ps代碼將提取所有Windows 7機器nto csv文件(下面的示例圖片)。我希望理想情況下首先使用DNS名稱查詢磁盤空間,如果由於RPC錯誤而導致磁盤空間失敗,則應該捕獲錯誤並使用IP地址重新運行該命令。這是因爲有些情況下,DNS條目未在我們的DNS上註冊,並且有時候ESX在查詢期間看到169.x.x.x IP,然後它將首先通過DNS名稱進行輪詢。Powershell嘗試並抓住一個循環
問題在於,我無法使用catch命令捕獲RPC失敗。在下面的示例中,我有意使用虛擬DNS名稱填充了.csv文件,希望它能夠捕獲錯誤並在catch部分中執行命令。不幸的是,它似乎沒有工作。
這裏的任何人都可以遮擋這一個燈光?
$Win7JumpboxList = import-csv 'D:\Win7DiskSpace\Win7PoweredOn.csv' |
ForEach-Object {
try {
Get-WmiObject -Class win32_volume -ComputerName $_.DnsName -Filter "drivetype=3 and DRIVELETTER = 'C:' " | Select-Object @{LABEL='Computer';EXPRESSION={$_.pscomputername}}, DriveLetter, @{LABEL="Capacity (GB)";e={[math]::round($_.Capacity/1GB, 2)}}, @{LABEL="FreeSpace (GB)";e={[math]::round($_.FreeSpace/1GB, 2)}},@{LABEL="FreeSpace (%)";e={[int]($_.Freespace*100/$_.Capacity)}} -ErrorAction Stop
}
catch [System.Runtime.InteropServices.COMException] {
Get-WmiObject -Class win32_volume -ComputerName $_.IPAddress -Filter "drivetype=3 and DRIVELETTER = 'C:' " | Select-Object @{LABEL='Computer';EXPRESSION={$_.pscomputername}}, DriveLetter, @{LABEL="Capacity (GB)";e={[math]::round($_.Capacity/1GB, 2)}}, @{LABEL="FreeSpace (GB)";e={[math]::round($_.FreeSpace/1GB, 2)}},@{LABEL="FreeSpace (%)";e={[int]($_.Freespace*100/$_.Capacity)}}
}
}
$Win7JumpboxList | Export-Csv D:\Win7DiskSpace\Win7DiskSpace.csv -NoTypeInformation -force
你'-Er roraction Stop' cmdlet在錯誤的地方。你必須把它放在'Get-WmiObject' cmdlet中才能使用。 –
WMI在最好的一天痛苦地緩慢而不可靠。如果您想要快速準確的數據並使用PowerCLI訪問vSphere,那麼這就是要走的路。 – brendan62269