2012-02-24 29 views
1

我正在使用PSRemoting與Web管理模塊獲取有關各個站點的信息,並且它正在工作。然而,我在調用該命令期間接收到一個煩人的非致命COM異常,並想知道是否有其他人解決了它。這裏有一個最小的實現:PowerShell IIS: WebAdmin遠程調用觸發器WSAStartup錯誤,WSANOTINITIALISED

cls 
$command = { 
    param($alias) 
    Import-Module 'WebAdministration' 
    $binding = Get-WebBinding -HostHeader $alias 
    $binding 
} 

$server = 'server' 
$args = @('alias') 
$session = New-PSSession -ComputerName $server 
Write-Host ("Invoking") 
try { 
    Invoke-Command -Session $session -ScriptBlock $command -ArgumentList $args 
    Write-Host ("Invoked") 
} catch { 
    Write-Host ("Caught $_") 
} finally { 
    Write-Host ("Removing") 
    Remove-PSSession -Session $session 
    Write-Host ("Removed") 
} 

而且這裏的結果:

Invoking 

protocol   : http 
bindingInformation : 10.x.x.x:80:alias 
... 
Schema    : Microsoft.IIs.PowerShell.Framework.ConfigurationElementSchema 

An unhandled COM interop exception occurred: Either the application has not called WSAStartup, or WSAStartup failed. (Exception from HRESULT: 0x800 
7276D) 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : COMException 

Invoked 
Removing 
Removed 

我觀察的結果被拋出錯誤之前返回。

好玩的細節:
- 獲取-網站,獲取項目 「IIS:\ ...」,則Get-WebBinding都會導致同樣的錯誤
- 直接在目標計算機上運行$命令,以書面結果沒有錯誤
- 獲取項目「d:\ ...」不會導致任何錯誤
- 的COM錯誤不

+0

我從PowerGUI的和Powershell命令提示符和對2臺不同的目標服務器3級獨立的服務器W2K8運行這段代碼。在所有情況下,我都收到了同樣的錯誤。 – codepoke 2012-02-24 16:27:38

+0

有趣的是,NetMon顯示與/ wsman的加密對話在失敗的WebAdmin會話和「成功」的Get-Item'd:\'會話之間非常相似。這兩個會話都以遠程服務器發回加密數據結束,然後(到最後一個帖子,理論上斷開請求?)500內部服務器錯誤。沒有真正的信息,因爲我無法解密對話,但很有趣。 – codepoke 2012-02-24 18:39:17

+0

由於我處於詳細模式,因此我將添加這個內容非常重要,因爲我的內部客戶端會看到錯誤並困擾我。爲此,直到找到真正的解決方案,我在遠程調用中添加了「-ErrorAction SilentlyContinue」。它處理這個問題。 – codepoke 2012-02-24 18:45:50

回答

0

這是什麼地方深深地埋在PowerShell的執行.NET的腸子和winsock的。它低於我可以校準的任何東西,所以我在遠程調用中添加了「-ErrorAction SilentlyContinue」。它不能解決任何問題,但一切正常。我想現在這個答案已經足夠了。

2

我能夠用解決問題如下:

$iisIpAddresses = Invoke-Command -Session $session -scriptblock { 
    if (!(Get-Module WebAdministration)) 
    { 
     Import-Module WebAdministration 
    } 
    $iisBindings = Get-WebBinding 
    [String[]]$iisBindings = $iisBindings | Select bindingInformation 
    $iisBindings 
} 

Remove-PSSession $session