Powershell 脚本中的 WMI 查询 returns 在计划任务中 运行 时没有对象

WMI query in powershell script returns no object when run in a scheduled task

我有一个 运行 成功的 powershell 脚本。我已经测试死了。当 运行 将其作为计划任务时,问题就来了。 WMI 查询 returns 没有对象。我已经在用于 运行 计划任务的帐户的上下文中使用 powershell 控制台 运行ning 进行了测试,并且在这些条件下它也成功 运行s 。只有当 运行作为计划任务时,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)

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

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