PowerShell IIS: WebAdmin Remote Invocation Trigger WsAstartup Errore, wsanotinitialis
-
12-11-2019 - |
Domanda
Sto usando PSRemoting con il modulo di amministrazione Web per ottenere informazioni su vari siti e funziona. Tuttavia, sto ricevendo una fastidiosa eccezione non fatale durante l'invocazione del comando e mi chiedo se qualcun altro l'ha risolta. Ecco un'implementazione minima:
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")
}
Ed ecco i risultati:
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
Osservo che il risultato viene restituito prima che l'errore venga lanciato.
Dettagli divertenti:
-get-website, get-elem "iis: ...", get-webbinding tutti i risultati nello stesso errore
- Esecuzione del comando $ direttamente sulla macchina target come risultati scritti in nessun errore
- Get-Item "D: ..." non provoca alcun errore
- L'errore com no
Soluzione 2
Questo è sepolto da qualche parte in profondità nelle viscere dell'implementazione di .NET e Winsock da parte di PowerShell. È al di sotto di tutto ciò che posso calibrare, quindi ho aggiunto "ERRORAZIONE SilentlyContinue" al mio remoto invoke. Non risolve nulla, ma tutto funziona correttamente. Questa è una risposta abbastanza per ora, immagino.
Altri suggerimenti
Sono stato in grado di aggirare il problema usando quanto segue:
$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