Назад | Перейти на главную страницу

Веб-администрирование модуля импорта Powershell

Каждый раз, когда я выполняю эту команду

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

Мы ценим любые предложения

Это проблема сериализации. New-WebSite и информацию о веб-сайтах верхнего уровня из IIS:\Sites\{sitename} протокол оба возвращают объекты типа Microsoft.IIs.PowerShell.Framework.Configuration. Этот объект содержит свойство ftpServer; и ftpServer не сериализуемый.

New-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

У меня была такая же проблема, как и у вас. Я пытался создать 16 сайтов. Первый создавался и имел такое же исключение ... выход из итерации и оставил меня только с одним созданным сайтом. Я не исправлял, но как обходной путь я добавил

| out-null

в конце строки. Этот скрытый вывод, поэтому исключение было проигнорировано, и моя итерация успешно продолжалась.

Что-то вроде:

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 в конце фрагмента кода)