"PowerShell перестал работать" на выходе PS после создания пользователя IIS
В Windows Server 2012 я использую PS для создания нового пользователя IIS (для автоматического развертывания с использованием MSDeploy). Сама команда работает нормально - пользователь создан - но как только я выхожу из сеанса PowerShell (набираю exit
или просто закрыв окно командной строки), появится диалоговое окно с сообщением "перестал работать PowerShell" со следующими подробностями:
Problem signature:
Problem Event Name: PowerShell
NameOfExe: powershell.exe
FileVersionOfSystemManagementAutomation: 6.2.9200.16628
InnermostExceptionType: Runtime.InteropServices.InvalidComObject
OutermostExceptionType: Runtime.InteropServices.InvalidComObject
DeepestPowerShellFrame: unknown
DeepestFrame: System.StubHelpers.StubHelpers.GetCOMIPFromRCW
ThreadName: unknown
OS Version: 6.2.9200.2.0.0.400.8
Locale ID: 1033
Рассматриваемые команды PS:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Management")
[Microsoft.Web.Management.Server.ManagementAuthentication]::CreateUser("Foo", "Bar")
Почему это происходит и как я могу избежать этого?
РЕДАКТИРОВАТЬ: я также подтвердил, что это проблема с PowerShell 4.0, поэтому я добавил этот тег. Я также отправил это на Connect.
ОБНОВЛЕНИЕ: Похоже, что Windows Server 2012 R2 не имеет этой же ошибки.
1 ответ
Старый пост, но я столкнулся с этим вопросом и нуждался в помощи с ним. Надеюсь, этот ответ поможет кому-то еще.
Это происходило со мной на Windows Server 2012 R2 с PowerShell 4. Мое решение не совсем верно, но оно дает мне то, что мне нужно. То, что я сделал, это поместил эту операцию в фоновый "поток", чтобы основной процесс не блокировался всплывающим окном, указывающим на сбой PowerShell. Примечание. PowerShell зависал только для меня, когда я запускал скрипт, который делал это через cmd или Microsoft Release Management. При вызове сценария непосредственно в окне PowerShell он не зависал. Даже когда это терпело крах, все, что я хотел, чтобы сценарий делал, выполнялось. Сбой произошел только после завершения сценария.
Вот немного моего кода
param($password)
$jobScript = {
Try
{
<# Clear the $Error variable so errors do not build up when debugging this script #>
$Error.Clear()
$userName = "SomeUser"
If([ADSI]::Exists("WinNT://./$userName"))
{
Add-Type -Path "C:\windows\system32\inetsrv\Microsoft.Web.Management.dll"
Add-Type -Path "C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll"
<# Set IIS Permissions on Default Web Site #>
Try
{
$errorMessage = "Error setting IIS Permissions on Default Web Site for $userName"
[Microsoft.Web.Management.Server.ManagementAuthorization]::Grant("$userName", "Default Web Site", $false)
Write-Output "IIS Permissions set on Default Web Site for $userName"
}
Catch <# Tried catching the specific exception thrown, but was not working #>
{
Write-Output "IIS Permissions already set on Default Web Site for $userName"
}
}
Else
{
$errorMessage = "The SomeUser user must be created prior to running this script"
Write-Output $errorMessage
Throw $errorMessage
}
}
Catch
{
# Signal failure to Microsoft Release Management
Write-Error "$errorMessage - $Error"
}
}
$job = Start-Job $jobScript
Wait-Job $job
Receive-Job $job
Решена - ошибка "Powershell прекратил работать" при запуске powershell или powershell_ise. Эта ошибка не произошла при запуске этих программ "Запуск от имени администратора". Все 20 физических и виртуальных серверов в этой сети испытывают эту проблему. Похоже, это связано с Windows Management Framework. На всех серверах установлена Windows Management Framework V5.1.
Это решило ошибку на всех протестированных серверах:
Установите Windows Management Framework, если он еще не установлен.
https://docs.microsoft.com/en-us/powershell/scripting/wmf/overview?view=powershell-6
Если на вашем компьютере уже установлена Windows Management Framework, установите это обновление:
http://www.catalog.update.microsoft.com/Search.aspx?q=3191564
После установки перезапустите сервер.
Пожалуйста, проголосуйте, если вы найдете это полезным.