访问被拒绝 - 获取-wmiobject win32_service(Powershell)

时间:2013-11-13 17:57:43

标签: windows-server-2008-r2 powershell-v3.0 access-denied wmi-query

  

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

1 个答案:

答案 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之后的括号之间有星号......)