2012-02-24 3 views
1

Я использую PSRemoting с модулем WebAdministration, чтобы получить информацию о различных сайтах, и он работает. Тем не менее, я получаю раздражающее нефатальное COM-исключение во время вызова команды и задаюсь вопросом, разрешил ли кто-либо другой. Вот минимальная реализация:PowerShell IIS: WebAdmin Remote Invocation запускает ошибку 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 

я наблюдаю результат возвращается до ошибки броска.

Занимательные детали:
- Get-сайт, Get-Item "IIS: \ ..." Get-WebBinding всего результата в той же самой ошибке
- Запуск $ команды непосредственно на целевой машине в качестве письменных результатов нет ошибки
- Get-Item «d: \ ...» не приводит к какой-либо ошибки
- ошибка СОМ не

+0

Я запускаю этот код из 3 отдельных W2k8 серверов в PowerGUI и Powershell быстрых и против 2-х различных целевых серверов. Во всех случаях я получил ту же ошибку. – codepoke

+0

Интересно, что NetMon показывает, что зашифрованный разговор с/wsman очень похож между неудачным сеансом WebAdmin и «последующим» сеансом Get-Item «d: \». Обе беседы заканчиваются удаленным сервером, отправляющим обратно зашифрованные данные, а затем (к последнему сообщению, теоретически об отключении)? 500 Внутренняя ошибка сервера. Никакой реальной информации нет, так как я не могу расшифровать разговор, но интересен. – codepoke

+0

Поскольку я в сложном режиме, я добавлю, что это важно, потому что мои внутренние клиенты будут видеть ошибку и беспокоят меня. С этой целью, пока я не найду реальное разрешение, я добавил «-ErrorAction SilentlyContinue» к моему удаленному вызову. Он справляется с проблемой. – codepoke

ответ

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 
Смежные вопросы