我有一個奇怪的問題......PowerShell的WMI查詢失敗的任務計劃程序執行時
我有下面的代碼,這需要從Sysinternals的磁盤使用工具的輸出(下面的鏈接)
Disk Usage - Sys Internals
所以首先我將物理驅動器放入數組$ Disks中,然後通過foreach枚舉這些數據,並與它們混淆。
我的問題就出在這行$迪爾= du.exe -q -v $ d.DeviceID
$PC = get-content env:COMPUTERNAME
$Disk = gwmi win32_logicaldisk -filter "drivetype=3"
foreach ($d in $Disk)
{
$Dir = du.exe -q -v $d.DeviceID
$Dir[8..($Dir.length-8)] | foreach {
$Size = $_.substring(0,10).replace(",","")/1024
$Path = $_.substring(10)
}
}
$ d.DeviceID應的驅動器盤符(例如C :)
然後我使用DU.exe的輸出填充$ Dir,但是$ d.DeviceID並不是按照它應該如何操作的,從任務運行這個結果有以下結果(添加了一行說$ d.DeviceID,以顯示輸出):
B:
無法索引到空數組中。
在C:\ DU.ps1:25 char:6
+ $ Dir [< < < < 8 ..($ Dir.length-8)] |的foreach {
+ CategoryInfo:InvalidOperation:(System.Object的[]:對象[])[],
的RuntimeException
+ FullyQualifiedErrorId:NullArray
C:
不能索引到一個空數組。
在C:\ DU.ps1:25 char:6
+ $ Dir [< < < < 8 ..($ Dir.length-8)] |的foreach {
+ CategoryInfo:InvalidOperation:(System.Object的[]:對象[])[],
的RuntimeException
+ FullyQualifiedErrorId:NullArray
d:
不能索引到一個空數組。
在C:\ DU.ps1:25 char:6
+ $ Dir [< < < < 8 ..($ Dir.length-8)] |的foreach {
+ CategoryInfo:InvalidOperation:(System.Object的[]:對象[])[],
的RuntimeException
+ FullyQualifiedErrorId:NullArray
從ISE或剛剛從殼牌沒有問題運行它,從所有方法運行在其他服務器上運行。
我相信在$迪爾vairable的人口問題,因爲du.exe具有與$ d.DeviceID
我不明白爲什麼它是有眼前這個服務器/任務sheduler麻煩問題。我試過以下幾種:
重新定義數組元素爲$ i = $ d。設備ID來解決它下降 - 什麼
來自其他服務器(包括DC)的導入導出的工作 - 沒有什麼
重新啓動Winmgmt服務 - 沒有什麼
我認爲這是一個權限問題,但即時通訊上的廣告作爲運行此頂級特權的Dom管理員。
請你們能幫就這一個,真的很卡住...
歡呼
李
嗨ravikanth,du.exe位於@ C:\ windows \ system32所以它總是找到,說我已經改變了代碼,以引用整個路徑。它會給我一個不被認可的程序/路徑錯誤。沒有工作目錄集,儘管我認爲這將作爲其Powershell的system32文件夾。腳本的目標是獲取所有驅動器下的每個文件夾路徑,並將其注入到SQL表中,這樣我們就可以在較低級別監視文件夾大小。這是關於目錄大小而不是磁盤空間。 $ Path是目錄路徑文件的一部分。 – 2011-03-31 14:29:17
更新了答案。檢查是否有幫助 – ravikanth 2011-03-31 15:55:52
抱歉需要更具體,我認爲它與powershell interpriting $ d.deviceID作爲輸出到屏幕是好的,但它沒有通過它du.exe正確填寫 – 2011-03-31 16:05:33