运行AsJob时,Get-WMIObject失败

时间:2010-04-20 19:51:09

标签: powershell

这是一个简单的问题,但它让我很难过。

$cred = Get-Credential
$jobs = @()
$jobs += Get-WmiObject `
-Authentication 6 `
-ComputerName 'serverName' `
-Query 'Select * From IISWebServerSetting' `
-Namespace 'root/microsoftiisv2' `
-EnableAllPrivileges `
-Credential $cred `
-Impersonation 4 `
-AsJob

$joblist = Wait-Job -Job $jobs -Timeout 60

foreach ($job in $jobs)
{
    if ($job.State -eq "Completed")
    {
        $app = Receive-Job -Job $job
        $app
    } else {
        ("Job not completed: " + $job.Name + "@" + $job.State + ". Reason:" + $job.ChildJobs[0].JobStateInfo.Reason)
        Remove-Job -Job $job -Force
    }
}

直接运行时查询成功,运行-AsJob时失败。

Reason:System.UnauthorizedAccessException: Access is denied. 

我已经开始使用-Impersonation,-Credentials,-Authority和-EnableAllPrivileges而没有任何有用的效果。看来我忽视了一些基本的东西。为什么我的Powershell提示符允许连接到远程服务器,但我的子进程被拒绝了?

2 个答案:

答案 0 :(得分:1)

是否为远程计算机和运行此计算机的计算机配置了PowerShell V2远程处理?如果您查看get-wmiobject的帮助,请说明以下内容:

  

注意:要使用此参数   远程计算机,本地和远程   必须配置计算机   远程处理。此外,你必须开始   Windows PowerShell使用“运行”   作为Windows V中的管理员“选项           ista和更高版本的Windows。有关更多信息,请参阅   参阅about_Remote_Requirements。

答案 1 :(得分:0)

您看到的“拒绝访问”实际上来自DCOM。 -AsJob和WMI使用更好,更有效的WMI远程处理形式,称为异步远程处理。因此,您必须进行一些额外的防火墙配置更改。特别是,我认为您需要在Windows防火墙UI中“允许远程管理”。

MSDN上的这个文档更详细地描述了该设置:

Connecting to WMI Thru Windows Firewall

希望这有帮助