我正在使用带有 WebAdministration 模块的 PSRemoting 来获取有关各个站点的信息,并且它正在工作。但是,我在调用命令期间收到了一个烦人的非致命 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 都导致相同的错误
- 直接在目标机器上运行 $command 作为书面结果没有错误
- Get-Item "d :\..." 不会导致任何错误
- COM 错误不会