administração na web do módulo de importação Powershell

6

Toda vez que executo este comando

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" }

Eu recebo o seguinte erro

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

O site é criado com sucesso até onde eu posso ver.

O seguinte comando dá o mesmo erro ao enumerar o testsite

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

Qualquer sugestão seria apreciada

    
por Sam Cogan 30.03.2010 / 11:42

2 respostas

4

Este é um problema de serialização. New-WebSite e informações do WebSite de nível superior do protocolo IIS:\Sites\{sitename} retornam objetos do tipo Microsoft.IIs.PowerShell.Framework.Configuration . Esse objeto contém uma propriedade ftpServer ; e ftpServer não é serializável.

As informações de

New-WebApplication e Sub-WebApplication do protocolo IIS:\Sites\{siteName}\{subappname} não possuem uma propriedade ftpServer . Eles não terão o mesmo erro de serialização.

A solução do @cad é ótima, porque evita que o script remoto retorne qualquer objeto.

Mas, se você quiser retornar as informações do site da máquina remota, poderá usar:

$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
    
por 02.10.2014 / 18:08
3

Eu tive o mesmo problema que você. Eu estava em uma iteração tentando criar 16 sites. Primeiro foi criado e teve a mesma exceção ... saindo da iteração e me deixando com apenas um site criado. Eu não corrigi-lo, mas como uma solução eu adicionei

| out-null

no final da linha. Essa saída suposta foi ignorada e minha iteração continuou feliz.

Algo como:

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}

(Observe que | out-null no final do snippet de código)

    
por 28.03.2012 / 18:38