PowerShell脚本执行在Windows Server 2012R2

时间:2018-02-23 07:36:44

标签: windows powershell process windows-server-2012-r2 hang

我的一个脚本在我们的一个产品安装过程中挂起。从PowerShell执行一些常见的PowerShell和本机ExE时会发生挂起。

以下问题中的更多详细信息实际记录在Windows PowerShell Forums

我们在Web程序包安装期间使用msdeploy,iisreset,appcmd,这是它挂起的地方,但在成功执行msdeploy.exe后会挂起。我尝试使用最新版本的msdeploy,但仍有一段时间挂起。

我们有大约7个Web软件包,在部署软件包之后以及部署软件包之前会发生挂起。

这里的代码逻辑。

步骤1:测试msdeploy是否存在,如果不安装

第2步:iisreset(有时挂起)

第3步:检查应用程序池是否可用,如果可用Stop-WebAppPool(有时挂起)

步骤4:使用msdeploy安装Web包

步骤5:获取应用程序池状态,如果未启动则启动 - (有时会挂起)

步骤6:使用appcmd.exe执行一些应用程序池设置(执行后挂起一些时间)

第7步:其他一些应用池设置,例如Set-ItemProperty IIS:\AppPools\$appPoolName -Name recycling.periodicRestart.memory -Value $appPoolRestartMemory

步骤8:获取下一个包并转到步骤1

有时,执行后会发生挂起  netsh http delete urlacl url=$url

注意:没有一个挂起是一致的,每次挂起都发生在任何一个地方。

我确实对powershell进程进行了procdump分析并最终在ntdll!ZwWaitForMultipleObjectsroutine中进行了所有挂起。

同样由proc explorer线程视图显示。

PFB悬挂把手的堆叠

 ntdll.dll!ZwWaitForMultipleObjects+0xa
 KERNELBASE.dll!WaitForMultipleObjectsEx+0xed
 clr.dll!GetMetaDataPublicInterfaceFromInternal+0x3a95e
 clr.dll!GetMetaDataPublicInterfaceFromInternal+0x3a7f8
 clr.dll!GetMetaDataPublicInterfaceFromInternal+0x3a5f1
 clr.dll!GetMetaDataPublicInterfaceFromInternal+0x3eeb5
 [Managed to Unmanaged Transition]
 mscorlib.dll!System.Threading.WaitHandle.InternalWaitOne+0x21
 mscorlib.dll!System.Threading.WaitHandle.WaitOne+0x31
 System.Management.Automation.dll!    
 System.Management.Automation.Runspaces.PipelineBase.Invoke+0x34
 Microsoft.PowerShell.ConsoleHost.dll!    
 Microsoft.PowerShell.Executor.ExecuteCommandHelper+0x154
 Microsoft.PowerShell.ConsoleHost.dll!    
 Microsoft.PowerShell.ConsoleHost.DoRunspaceInitialization+0x7ed
 Microsoft.PowerShell.ConsoleHost.dll!    
 Microsoft.PowerShell.ConsoleHost.DoCreateRunspace+0x1d3
 Microsoft.PowerShell.ConsoleHost.dll!    
 Microsoft.PowerShell.ConsoleHost.CreateRunspace+0x49
 Microsoft.PowerShell.ConsoleHost.dll!    
 Microsoft.PowerShell.ConsoleHost.DoRunspaceLoop+0xc3
 Microsoft.PowerShell.ConsoleHost.dll!    
 Microsoft.PowerShell.ConsoleHost.Run+0x14c
 Microsoft.PowerShell.ConsoleHost.dll!    
 Microsoft.PowerShell.ConsoleHost.Start+0x1aa
 Microsoft.PowerShell.ConsoleHost.dll!                            
 Microsoft.PowerShell.UnmanagedPSEntry.Start+0x33c
 [Unmanaged to Managed Transition]
 clr.dll!DllCanUnloadNowInternal+0xbe3
 clr.dll!DllCanUnloadNowInternal+0xaa3
 clr.dll!GetMetaDataInternalInterfaceFromPublic+0x1abde
 clr.dll!GetMetaDataInternalInterfaceFromPublic+0x1aa87
 [Managed to Unmanaged Transition]
 mscorlib.dll!System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal+0x80
 mscorlib.dll!System.Reflection.RuntimeMethodInfo.Invoke+0x92
 [Unmanaged to Managed Transition]
 clr.dll!DllCanUnloadNowInternal+0xbe3
 clr.dll!DllCanUnloadNowInternal+0xaa3
 clr.dll!DllCanUnloadNowInternal+0x12f5
 clr.dll!SetRuntimeInfo+0x20b4
 clr.dll!SetRuntimeInfo+0x1c16
 clr.dll!SetRuntimeInfo+0x253d
 clr.dll!SetRuntimeInfo+0x2906
 clr.dll!SetRuntimeInfo+0x276d
 clr.dll!SetRuntimeInfo+0x26ae
 powershell.exe+0x8663
 powershell.exe+0x7c67
 powershell.exe+0xa6cc
 KERNEL32.DLL!BaseThreadInitThunk+0x22
 ntdll.dll!RtlUserThreadStart+0x34

0 个答案:

没有答案