2013/11/13 11:35:37 TRCW1使用本地计算机11/13/2013 11:35:37 TRCE1 System.Management.ManagementException:拒绝访问 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)at System.Management.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 parms(如上面的代码所示),但仍然出现错误。
到目前为止,我的研究表明答案可能在于
set-item trustedhosts
但我的主要问题是trustedhosts是适用于本地服务器还是仅适用于远程服务器。计算机不会总是信任自己吗?它是否仍然使用远程处理与自己交谈?
在我到达这里之前很长一段时间,这台服务器显然是集群的一部分,而现在却不是。我也对此表示怀疑。
当我以交互方式运行时,脚本运行正常,只有当我安排它并在服务帐户下运行它时,它才会失败且访问被拒绝。服务帐户是该框上的本地管理员。
我正在使用get-wmiobject win32_service而不是get-service,因为它返回了我需要查找进程的额外信息,以及使用另一个WMI调用启动服务的日期/时间。
在Win 2008 / R2上运行。
2013年11月13日更新5:27Pm
我刚刚验证了问题发生在多台服务器上。 [我拿了脚本并在另一台服务器上运行。]我的CSV输入包括要监控的服务器列表。我自己的服务器之外的那些总是返回结果。我自己的服务器,省略-ComputerName失败。 (我已尝试使用和不使用本地服务器的-ComputerName parm)。
答案 0 :(得分:0)
您是否以“管理员”(UAC)身份运行脚本?如果您为本地实例计算了凭据(如果已启用UAC且未以“管理员身份”运行),则会删除本地管理员安全令牌。通过网络连接到不同的计算机,A)它完全绕过UAC,B)当目标评估您的令牌时,您所在的组成员资格得到全面评估,从而获得“管理员”访问权。
可能不相关,但我刚刚在我的系统上运行了两台2008 R2服务器中的两台,拒绝了我正在收集的第一个性能标准,但只有当它作为计划任务运行时。如果我以交互方式运行它,它至少可以在95%的时间内运行。我正在收集Disk Seconds / Read和Seconds / Write,因此只有这两个服务器的读取才会显示。我翻了订单,你知道什么,写道不报道。我刚刚将一个驱动器Seconds / Transfer作为牺牲品添加到我的标准列表的开头,而VOILA现在我没有得到读取和写入的访问权。
$ counterlist = @(“\ $ server \ PhysicalDisk(0 *)\ Avg.Disk sec / Transfer”, “\ $ server \ PhysicalDisk()\ Avg.Disk sec / Read”, “\ $ server \ PhysicalDisk()\ Avg.Disk sec / Write”)
$ counter = $ counterlist |得到-计数器
(不知道怎么编辑这个,但是在physicaldisk之后的括号之间有星号......)