«PowerShell перестал работать» при выходе из PS после создания пользователя IIS

«PowerShell перестал работать» при выходе из PS после создания пользователя IIS

На компьютере с Windows Server 2012 я использую PS для создания нового пользователя IIS (для автоматизированных развертываний с помощью MSDeploy). Сама команда, кажется, работает нормально — пользователь создается — но как только я выхожу из сеанса PowerShell (набирая текст exitили просто закрывая окно команд), отображается диалоговое окно с сообщением «powershell has stopped working» (остановлена ​​работа) со следующими подробностями:

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, поэтому я добавил этот тег. Я также отправил его наСоединять.

ОБНОВЛЯТЬ:Похоже, что в 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

решение2

Решено - Ошибка "Powershell has stopped working" при запуске powershell или powershell_ise. Эта ошибка не возникала при запуске этих программ "Run As Administrator". Все 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

После установки перезагрузите сервер.

Пожалуйста, проголосуйте, если вы считаете это полезным.

Связанный контент