如何创建不受父进程终止影响的独立PowerShell进程?
如何从PowerShell脚本启动完全独立的后台进程(不受父进程终止影响)
我需要在运行于ProcessA的PowerShell脚本中启动ProcessB作为后台进程,要求ProcessA终止(比如关闭控制台窗口)时,ProcessB仍能持续独立运行。
之前尝试过两种方法但都未能成功:
- 使用
Invoke-WmiMethod:Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList ScriptA.ps1 - 使用
Invoke-Command -AsJob:
后者不仅无法正常运行原本在Invoke-Command -ComputerName . -AsJob -ScriptBlock { sleep 10; cmd /c set > c:\env.txt; }Start-Job里能工作的脚本块,还因为被当作远程进程处理,需要额外配置远程管理相关设置,操作繁琐。
另外之前误以为Start-Process powershell.exe会随父进程终止,后来纠正了这个错误认知——它其实可以创建完全独立的进程。
推荐解决方案:使用Start-Process
Start-Process是本地场景下最直接、无需额外配置的方案,默认就能生成不依附于父进程的独立进程。
启动PowerShell脚本作为后台进程
如果要运行的是PowerShell脚本,用以下命令:
Start-Process powershell.exe -ArgumentList "-File `"C:\Path\To\ScriptA.ps1`"" -WindowStyle Hidden
-WindowStyle Hidden:让进程在后台静默运行,不弹出新的控制台窗口- 若脚本路径包含空格,需用转义双引号(
"")包裹路径,确保参数解析正确
启动其他可执行程序
如果要启动的是普通EXE文件,直接替换路径即可:
Start-Process "C:\Path\To\ProcessB.exe" -WindowStyle Hidden
补充:之前方法失效的原因
Invoke-WmiMethod用法错误:
原来的命令缺少了启动脚本的宿主程序(powershell.exe),正确写法应该是:Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell.exe -File C:\Path\To\ScriptA.ps1"但这种方式相比
Start-Process没有优势,反而参数写法更复杂。Invoke-Command -AsJob不适合本地场景:
该命令依赖WinRM服务,需要提前启用并配置信任关系,对于本地启动独立进程的需求来说,属于过度复杂的方案,完全没必要使用。
内容的提问来源于stack exchange,提问作者YorSubs
相关产品推荐
相关产品推荐

