我有一个奇怪的问题......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