IIS ユーザーの作成後に PS 終了時に「PowerShell が動作を停止しました」と表示される

IIS ユーザーの作成後に PS 終了時に「PowerShell が動作を停止しました」と表示される

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でもこの問題が発生することが確認されたので、そのタグを追加しました。また、接続する

アップデート:Windows Server 2012 R2 には同じバグはないようです。

答え1

古い投稿ですが、まさにこの問題に遭遇し、助けが必要でした。この回答が他の誰かの役に立つことを願っています。

PowerShell 4 を実行している Windows Server 2012 R2 で発生していました。私の解決策は、完全な修正ではありませんが、必要なことは達成できました。私が行ったのは、この操作をバックグラウンドの「スレッド」に配置して、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 または powershell_ise のいずれかを起動すると、「Powershell は動作を停止しました」というエラーが発生します。このエラーは、これらのプログラムを「管理者として実行」して起動したときには発生しませんでした。このネットワーク内の 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

インストールが完了したら、サーバーを再起動します。

役に立ったと思ったら投票してください。

関連情報