PowerShell中对应bash里set -x的命令是什么?
PowerShell 中类似 bash
set -x 的命令追踪功能 在 PowerShell 里,有几种方法可以实现类似 bash set -x 的命令执行追踪效果,下面是最常用的几种方案:
1. 使用 Set-PSDebug -Trace 1
这是最贴近 bash set -x 的原生功能,启用后会自动打印每个执行的命令行(包括变量展开后的最终内容)。
示例脚本:
Set-PSDebug -Trace 1 $myVar = "C:\" ls $myVar
输出效果:
DEBUG: 1+ Set-PSDebug -Trace 1 DEBUG: 3+ $myVar = "C:\" DEBUG: 4+ ls $myVar 目录: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2023/02/14 21:19 Windows -a---- 2023/01/01 00:00 681 example.txt 1 个文件 681 字节 18 个目录 514,576,928,768 字节可用
关闭追踪只需执行 Set-PSDebug -Trace 0。
2. 自定义 + 前缀格式(贴近 bash 输出风格)
如果想要完全模拟 bash 里的 + 前缀标识,可以通过简单的自定义函数实现:
$DebugPreference = 'Continue' function Invoke-Traced { param([ScriptBlock]$Cmd) Write-Debug "+ $($Cmd.ToString().Trim())" & $Cmd } # 使用示例 $myVar = "C:\" Invoke-Traced { ls $myVar }
输出效果:
DEBUG: + ls $myVar 目录: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2023/02/14 21:19 Windows -a---- 2023/01/01 00:00 681 example.txt 1 个文件 681 字节 18 个目录 514,576,928,768 字节可用
3. 使用 Trace-Command(深度调试)
如果需要查看命令执行的内部细节(比如参数绑定、命令发现流程),可以用 Trace-Command,它会输出更详尽的调试信息:
Trace-Command -Name CommandDiscovery,ParameterBinding -Expression { ls "C:\" } -PSHost
这个命令适合复杂场景下的底层流程排查。
内容的提问来源于stack exchange,提问作者tftd
相关产品推荐
相关产品推荐

