在 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
安装后,重新启动服务器。
如果您觉得有帮助请投票。