powershell脚本中的WMI查询在计划任务中运行时不返回任何对象

时间:2015-02-26 20:04:25

标签: powershell scheduled-tasks wmi

我有一个成功运行的powershell脚本。我已经测试过它。将其作为计划任务运行时会出现问题。 WMI查询不返回任何对象。我已经使用在用于运行计划任务的帐户的上下文下运行的powershell控制台进行了测试,并且它也在这些条件下成功运行。仅当作为计划任务运行时,WMI查询才会失败。

...

Function getMSMQMessageCount($queueName) {
    Add-content $LogFile "Querying $queueName"

    $query = "SELECT MessagesinQueue FROM Win32_PerfRawData_MSMQ_MSMQQueue WHERE Name = '$queueName'"
    try{
        $wmiObject = Get-WmiObject -Query $query
        $wmiObject.MessagesinQueue
    }catch{
        Add-content $LogFile "MSMQ Enumeration error $($_.Exception)" 
    }
}

$messaging = getMSMQMessageCount 'server\\private$\\messaging.application'

用于发出查询的函数中捕获到异常:

System.Management.Automation.RuntimeException: Property 'MessagesinQueue' cannot be found on this object. Make sure that it exists.
   at System.Management.Automation.PropertyReferenceNode.GetValue(PSObject obj, Object property, ExecutionContext context)
   at System.Management.Automation.PropertyReferenceNode.Execute(Array input, Pipe outputPipe, ExecutionContext context)
   at System.Management.Automation.ParseTreeNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
   at System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)

1 个答案:

答案 0 :(得分:0)

我没有测试过您的代码,但听起来需要管理员权限来检索数据。

要使用您帐户的管理员权限,您需要检查计划任务的“常规”页面上的Run with highest privileges - 复选框。这类似于在手动运行时在UAC对话框中回答“是”。