创建 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 崩溃。请注意,只有当我通过 cmd 或 Microsoft Release Management 运行执行此操作的脚本时,PowerShell 才会崩溃。在 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 管理框架。

https://docs.microsoft.com/en-us/powershell/scripting/wmf/overview?view=powershell-6

如果您的计算机已安装 Windows 管理框架,请安装此更新:

http://www.catalog.update.microsoft.com/Search.aspx?q=3191564

安装后,重新启动服务器。

如果您觉得有帮助请投票。

相关内容