2010-04-20 43 views
0

這是一個簡單的問題,但它困擾着我。運行AsJob時,Get-WMIObject失敗

$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 jiggered沒有有用的效果。看來我忽略了一些根本性的東西。爲什麼我的Powershell提示允許連接到遠程服務器,但我的子進程被拒絕?

+0

Grrrrrrr-GLE> - 從服務器運行時/代碼運行正常。初步猜測:某處有防火牆攔截我的流量。 – codepoke 2010-04-20 21:00:57

回答

1

遠程計算機和正在運行此計算機的計算機是否配置了PowerShell V2遠程處理?如果你看一下幫助GET-WmiObject可以其規定如下:

注意:要使用 遠程計算機使用這個參數,在本地和遠程計算機 必須配置 遠程處理。此外,您必須在Windows V ista及更高版本的Windows中使用「以管理員身份運行 」選項啓動 Windows PowerShell。有關更多信息,請參閱 about_Remote_Requirements。

+0

啊。我現在明白了。當我能夠直接連接時,我認爲該問題是以某種方式驗證的。實際上,PowerShell正試圖遠程運行該命令。我無法在我正在使用的200多個盒子中的任何一個上輸入-PSSession,並且我無法在其上配置遠程處理。我想我會批量處理我的請求,並將它們作爲同時的多個本地會話運行。我的指定環境中具有相同的優點並可以工謝謝,詹姆斯。 – codepoke 2010-04-23 12:21:13

0

你看到的「訪問被拒絕」實際上來自DCOM。 --AsJob和WMI使用稱爲異步遠程處理的更好,更有效的WMI遠程處理形式。正因爲如此,你必須做一些額外的防火牆配置更改。特別是,我相信你需要在Windows防火牆用戶界面中「允許遠程管理」。

本文MSDN上介紹更詳細的設置:

Connecting to WMI Thru Windows Firewall

希望這有助於

+0

謝謝「開始」。但我確信99%,在此W2k3服務器上禁用Windows防火牆。它默認情況下是禁用的(根據您的文章),我相信我們有一個關閉內部防火牆的策略。我可以在星期一檢查,但我不相信這是它。 – codepoke 2011-03-24 17:21:49