Powershell 导入模块 web 管理

Powershell 导入模块 web 管理

每次我执行这个命令

invoke-command -computername REMOTEPC -scriptblock { import-module WebAdministration; new-item "$env:systemdrive\inetpub\testsite" -type directory; New-WebSite -Name TestSite -Port 81 -PhysicalPath "$env:systemdrive\inetpub\testsite" }

我收到以下错误

Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))
    + CategoryInfo          : NotSpecified: (:) [Get-ChildItem], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.PowerShell.Commands.GetChildItemCommand

据我所知,该网站已成功创建。

以下命令在枚举测试站点时给出相同的错误

Invoke-Command -computername REMOTEPC { import-module webadministration; dir -path IIS:\Sites\ }

Name             ID   State     Physical Path     Bindings      PSComputerName
Default Web Site 1    Started                     http *:80:    REMOTEPC

Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))
    + CategoryInfo          : NotSpecified: (:) [Get-ChildItem], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.PowerShell.Commands.GetChildItemCo
   mmand

任何建议,将不胜感激

答案1

这是一个序列化问题。协议New-WebSite中的 和顶级 WebSite 信息IIS:\Sites\{sitename}都返回 类型的对象Microsoft.IIs.PowerShell.Framework.Configuration。该对象包含属性ftpServer;并且ftpServer不可序列化。

New-WebApplication并且来自协议的 Sub-WebApplication 信息IIS:\Sites\{siteName}\{subappname}没有ftpServer属性。它们不会出现相同的序列化错误。

@cad 的解决方案很棒,因为它可以阻止远程脚本返回任何对象。

但是,如果您想从远程机器返回网站信息,您可以使用:

$scriptBlock = {
    Import-Module WebAdministration

    $site = Get-Item IIS:\Sites\www.sitename.com

    $site.ftpServer = $null   # this won't affect the real server value

    return $site
}

Invoke-Command -ComputerName REMOTEPC -ScriptBlock $scriptBlock

答案2

我遇到了和你一样的问题。我在一个迭代中尝试创建 16 个站点。第一个站点正在创建,但出现了同样的异常...退出迭代,只留下一个站点创建。我没有修复它,但作为一个解决方法我补充道

| 出空

在行尾。这抑制了输出,因此异常被忽略,并且我的迭代顺利地继续。

就像是:

invoke-command -computername REMOTEPC -scriptblock { import-module WebAdministration; new-item "$env:systemdrive\inetpub\testsite" -type directory; New-WebSite -Name TestSite -Port 81 -PhysicalPath "$env:systemdrive\inetpub\testsite" | out-null}

(请注意代码片段末尾的 | out-null)

相关内容