我有一个成功运行的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)
答案 0 :(得分:0)
我没有测试过您的代码,但听起来需要管理员权限来检索数据。
要使用您帐户的管理员权限,您需要检查计划任务的“常规”页面上的Run with highest privileges
- 复选框。这类似于在手动运行时在UAC对话框中回答“是”。