Каждый раз, когда я выполняю эту команду
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 в конце фрагмента кода)