如何获取PowerShell多层调用场景下最初启动的脚本名称
获取PowerShell多层调用链初始启动脚本的方案
你可以通过读取PowerShell完整调用栈的方式获取最底层的启动脚本,不受调用深度限制,具体实现方式如下:
- 核心原理:
Get-PSCallStackcmdlet会返回完整的当前会话调用栈数组,数组索引0对应当前执行位置,数组最后一个元素对应整个调用链的初始入口。
# 读取完整调用栈 $fullCallStack = Get-PSCallStack # 取栈底的初始调用记录 $rootEntry = $fullCallStack[$fullCallStack.Count - 1] # 获取初始启动脚本的绝对路径 $rootScriptPath = $rootEntry.ScriptName # 输出验证 Write-Host "整个调用链的初始启动脚本为:$rootScriptPath"
如果调用链的起点是PowerShell交互窗口直接执行的命令、而非
.ps1脚本启动,ScriptName属性会返回空值,此时可以读取$rootEntry.Position.Text属性获取初始执行的命令内容。
该方案兼容PowerShell 3.0及以上所有版本,不管嵌套多少层cmdlet、.ps1脚本,只要是PowerShell会话内发起的调用,都会被完整记录在调用栈中。
内容的提问来源于stack exchange,提问作者deetle
相关产品推荐
相关产品推荐

