2013-02-19 83 views
4

我试图在3个终端服务器上查找$ _。commandline属性中包含某些单词的进程。在我的域管理员帐户下,它工作正常。但是我希望这个脚本对于域用户可用,并且doamin用户在运行这个脚本时会出错。“get-wmiobject win32_process -computername”得到错误“拒绝访问,代码0x80070005”

我该怎么做,以便域用户可以像域管理员一样运行该脚本?提前致谢!

错误:

Get-WmiObject : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESS DENIED)) 
At N:\FindWhoIsUsing\FindWhoIsUsing.ps1:7 char:18 
get-wmiobject <<<< win32_process -computername $server -EnableAllPrivileges| 
CategoryInfo   : NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException 
FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand 

PowerShell代码:

Write-host "Who is using this profile?" 
$profile = Read-host "specify profile name" 
$servers = @("server-01","server-02","server-03") 
Foreach($server in $servers) 
{ 
    Write-host $server 
    get-wmiobject win32_process -computername $server -EnableAllPrivileges| 
    where{$_.name -like "*Processname*" -and 
    $_.CommandLine -like "*$profile*"}| 
    select @{n="Server";e={$server}},@{n="User";e={$_.getowner().user}},@{n="ProcessID";e= {$_.ProcessID}},{$_.CommandLine}|fl 
} 
Write-host "DONE Searching!" 
+0

域用户显然缺乏域管理员拥有的所有权限,您需要将他们添加到相关组中,以授予他们所需的访问权限。 – 2013-02-19 08:27:40

+0

是的,我同意你的意见。但问题是,如何?:)我当然不想将所有域用户添加到域管理员,对不对?具体来说,必须有一些WMI控制的地方,但我不知道如何配置它。其实我在目标服务器上的wmimgmt.msc中混淆了一下,但没有运气,也许这是正确的地方,但我没有做对。 – bookends 2013-02-19 08:33:33

回答

11

确定这里的步骤是:

  1. 启动 “wmimgmt.msc”
  2. 的“WMI右击控制(本地)“,然后选择属性
  3. 转到“安全”选项卡,选择“安全”,然后“高级”,然后“添加”
  4. 选择用户名(S)或组(S)你想授予访问WMI,并单击确定
  5. 授予所需的权限,我建议首先授予所有权限以确保授予访问权限,然后根据需要随后删除权限。
  6. 确保“应用到”选项设置为“这个命名空间和子名称”
  7. 保存并退出所有提示
  8. 添加用户(一个或多个)或组(S),以当地的“分布式COM用户”组。注意:“身份验证用户”和“所有人”组无法在此处添加,因此您可以使用“域用户”组。
+0

那里有4个组:管理员,经过身份验证的用户,本地服务和网络服务,应该更新哪个用户的权限? – bookends 2013-02-19 09:29:57

+0

这应该是“认证用户”。您还可以添加“每个人”组。 – 2013-02-19 09:37:22

+0

我在那里添加了“everyone”,并在所有“允许”复选框上进行切换。我还确保将“应用于”选项设置为“此名称空间和子名称空间”用于“所有人”。我认为它应该足够域用户,但它没有工作,错误只是保持不变... – bookends 2013-02-20 08:24:32

相关问题