如何获取PowerShell脚本自身的PID?
PowerShell 获取脚本自身PID的方法
首先明确Bash和PowerShell的核心差异:
- Bash运行脚本时默认会创建子Shell进程,
$$返回的是这个子进程的PID,所以每次运行脚本PID都不同。 - PowerShell默认在当前宿主进程(比如你打开的PowerShell控制台)中执行脚本,
$PID返回的是宿主进程的ID,只要宿主进程不关闭,PID就不会变。
以下是两种场景的解决方案:
场景1:获取脚本当前所在进程的PID
如果只是需要脚本运行时的进程ID(不强制每次变化),直接用$PID即可。
示例脚本(保存为test.ps1):
Write-Host "脚本进程PID: $PID" Write-Output "THIS IS A TEST"
直接在控制台执行.\test.ps1,输出的PID会和控制台进程的PID一致,多次运行PID不变。
场景2:每次运行脚本获取新的PID(模拟Bash的$$)
要实现和Bash一样每次运行脚本都生成新PID,需要让脚本在新的PowerShell进程中执行:
方法1:手动启动新进程执行脚本
在控制台中运行以下命令,脚本会在新进程中执行,每次PID都不同:
powershell.exe -File .\test.ps1
如果使用PowerShell Core(pwsh),则替换为:
pwsh.exe -File .\test.ps1
方法2:脚本自动启动新进程执行
如果想让脚本自己触发新进程运行(无需手动输入额外命令),可以在脚本中加入以下逻辑:
# 检查是否已在子进程中,避免无限递归 if (-not $env:RUN_IN_CHILD) { $env:RUN_IN_CHILD = "1" # 启动新进程执行当前脚本 Start-Process powershell.exe -ArgumentList "-File `"$($MyInvocation.MyCommand.Path)`"" -NoNewWindow exit } # 脚本核心逻辑 Write-Host "脚本进程PID: $PID" Write-Output "THIS IS A TEST"
运行这个脚本时,会自动启动新的PowerShell进程执行核心代码,每次运行的PID都会变化。
内容的提问来源于stack exchange,提问作者Morph59
相关产品推荐
相关产品推荐

