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 对话框中回答是。
我有一个 运行 成功的 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 对话框中回答是。