当WMI被破坏时,它会以最奇怪的方式失败,某些查询(其中大多数)会起作用,有些会抛出exception,有些会超时,有些只会返回没有(或部分/错误)的结果。
由于我有一个复杂的重要WMI系统监视作业,我希望能够在运行脚本之前发现损坏的WMI存储库。 通过脚本行为来确定它是很困难的(因为WMI可能会失败的方式有很多),而且通常可以花费相当长的时间来计算它的系统或WMI错误。
我本质上是寻找一种方法,我可以从我的PowerShell脚本开始执行,以确定WMI是否损坏。
微软产品支持服务团队发布了一个脚本,专门用来查找和诊断损坏的WMI数据库,即WMI诊断实用程序 。
有关如何使用WMMI的疑难解答WMI的更多信息。
不幸的是,我不太清楚如果你想在开始工作的时候运行这个工具对你来说有多有用,那更多的是人们倾向于在一个普通的地方自动运行根据需要查看的机器进行报告。
一种方法(如果您将脚本失败行为设置为“忽略”)就是将gwmi语句分配给一个variables,然后检查该variables的variables。
$connectToWMI = gwmi win32_service -computername [computername]
然后检查variables的状态或值(使用write-host来查看成功连接和失败的期望)
它也看起来像你可能能够设置陷阱进行错误检查,但我没有使用它。 它是这样的:
trap [Exception] {continue}
我没有针对具体问题的答案,但是为什么这很重要? 您从脚本得到通知失败,然后您必须手动修复它。 发生此通知是因为脚本失败。 如果您在脚本中添加了额外的代码来首先检查损坏的WMI,工作stream程仍然完全相同 。
/编辑 – 确定 – 所以你有不同的,可能未知的方式,WMI可能会失败,如果它损坏? 而且你要求一种方法来检查它是否损坏? 那你就是SOL 我会注意到你说的
“(和后花费时间弄清楚,如果它由于重要的系统原因失败,或者如果它仅仅是由于损坏的WMI)”
那么,你需要更好的返回码,也许在你的脚本更好的functiondevise。 如果您的脚本不告诉您为什么失败,请修复它。 gWaldo关于陷印有一个很好的build议。 在这一点上,我想你会更好地重新考虑你在做什么,然后花一些时间在StackOverflow上。