PowerShell IIS: \ Удаленный вызов WebAdmin вызывает ошибку WSAStartup, WSANOTINITIALISED - PullRequest
2 голосов
/ 24 февраля 2012

Я использую PSRemoting с модулем WebAdministration для получения информации о различных сайтах, и это работает. Я, однако, получаю досадное нефатальное COM-исключение во время вызова команды и задаюсь вопросом, разрешил ли это кто-то еще. Вот минимальная реализация:

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

Я вижу, что результат возвращается до появления ошибки.

Забавные детали:
- Get-Website, Get-Item "IIS: \ ...", Get-WebBinding все приводят к одной и той же ошибке
- Выполнение команды $ непосредственно на целевой машине, так как записанное не приводит к ошибке
- Get-Item "d: \ ..." не приводит к ошибке
- Ошибка COM не

Ответы [ 2 ]

2 голосов
/ 27 февраля 2013

Мне удалось обойти проблему, используя следующее:

    $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
0 голосов
/ 18 января 2013

Это скрыто где-то глубоко в недрах реализации PowerNET для .NET и winsock. Это ниже всего, что я могу откалибровать, поэтому я добавил «-ErrorAction SilentlyContinue» в мой удаленный вызов. Это ничего не исправляет, но все работает правильно. Думаю, этого ответа пока достаточно.

...