0

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 参数)。

4

1 回答 1

0

您是否以“管理员身份”(UAC)运行脚本?如果您启用了 UAC 并且您没有“以管理员身份”运行它,则在为您的本地实例计算您的凭据时,它会删除本地管理员安全令牌。通过网络连接到另一台机器,A) 它完全绕过 UAC,并且 B) 当目标评估您的令牌时,您所在的组成员资格被完全评估,因此您获得“管理员”访问权限。

可能不相关,但我刚刚在我的系统上运行了两台 2008 R2 服务器,其中 10 台服务器拒绝了我收集的第一个性能标准,但仅当它作为计划任务运行时。如果我以交互方式运行它,它至少有 95% 的时间可以工作。我正在收集磁盘秒数/读取和秒数/写入,所以只有这两个服务器没有显示读取。我颠倒了订单,你知道吗,Writes 不报告。我刚刚将一个驱动器秒/传输作为牺牲羔羊添加到我的标准列表的开头,瞧,现在我没有拒绝访问读取和写入。

$counterlist = @("\$server\PhysicalDisk(0*)\Avg. Disk sec/Transfer", "\$server\PhysicalDisk( )\Avg. Disk sec/Read", "\$server\PhysicalDisk( )\平均磁盘秒/写入")

$counters = $counterlist | 获取计数器

(不知道如何编辑这个,但在物理磁盘之后的括号之间有星号......)

于 2014-01-30T17:49:36.987 回答