2013 年 11 月 13 日 11:35:37 TRCW1 使用本地计算机 2013 年 11 月 13 日 11:35:37 TRCE1 System.Management.ManagementException: 在 System.Management 的 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)拒绝访问。 ManagementObjectCollection.ManagementObjectEnumerator.MoveNext() 在 Microsoft.PowerShell.Commands.GetWmiObjectCommand.BeginProcessing()
代码(在服务器名称循环内):
$error.clear() #clear any prior errors, otherwise same error may repeat over-and-over in trace
if ($LocalServerName -eq $line.ServerName)
{
# see if not using -ComputerName on local computer avoids the "service not found" error
Add-Content $TraceFilename "$myDate TRCW1 using local computer "
$Service = (get-wmiobject win32_service -filter "name = '$($line.ServiceName)'")
}
else
{
Add-Content $TraceFilename "$myDate TRCW2 using remote computer $($line.ServerName) not eq $LocalServerName"
$Service = (get-wmiobject win32_service -ComputerName $line.ServerName -filter "name = '$($line.ServiceName)'")
}
if ($error -ne $null)
{
Write-Host "----> $($error[0].Exception) "
Add-Content $TraceFilename "$myDate TRCE1 $($error[0].Exception)"
}
我正在读取服务器名称的 CSV。我终于添加了异常逻辑,发现我得到了“拒绝访问”。这仅发生在本地服务器上。似乎几乎倒退,本地服务器失败,而远程服务器工作正常。我什至更改了逻辑以测试它是否是本地服务器,然后尝试在 WMI 上保留 -ComputerName 参数(如上面的代码所示),但仍然出现错误。
到目前为止,我的研究表明答案可能在于
设置项目trustedhosts
但我的主要问题是trustedhosts 是否适用于本地服务器,或仅适用于远程服务器。计算机不会总是相信自己吗?它仍然使用远程处理与自己对话吗?
在我到达这里很久之前,这台服务器显然是集群的一部分,但现在不是了。我也对此表示怀疑。
当我以交互方式运行脚本时,它工作正常,只有当我安排它并在服务帐户下运行它时,它才会因访问被拒绝而失败。服务帐户是该框中的本地管理员。
我使用 get-wmiobject win32_service 而不是 get-service 因为它返回我需要查找进程的额外信息,以及使用另一个 WMI 调用启动服务的日期/时间。
在 Win 2008/R2 上运行。
以下更新 2013 年 11 月 13 日下午 5:27
我刚刚验证了问题发生在不止一台服务器上。[我获取脚本并在另一台服务器上运行它们。] 我的 CSV 输入包括要监控的服务器列表。我自己的服务器之外的那些总是返回结果。我自己的服务器的那些省略 -ComputerName 失败。(我尝试过使用和不使用本地服务器的 -ComputerName 参数)。