PowerShell脚本,显示命令运行


36

我正在使用PowerShell脚本,它们工作得很好。但是,我想知道是否有办法显示所有已运行的命令,就像您自己手动键入它们一样。这类似于批处理文件中的“回显”。我查看了PowerShell命令行参数cmdlet,但没有发现任何明显的内容。谢谢!

Answers:


44

以下命令将脚本的每一行输出到Write-Debug-

Set-PSDebug -Trace 1

man Set-PSDebug

当“跟踪”参数设置为1时,将在执行脚本时跟踪脚本的每一行。当参数设置为2时,还将跟踪变量分配,函数调用和脚本调用。如果指定了Step参数,则会在执行脚本的每一行之前提示您。


如果将其添加到使用的脚本中Param,请确保将此行放置在参数定义块下方,否则可能会导致失败。
kayleeFrye_onDeck

4

echo on在CMD中使用的位置现在使用Write-VerboseSet-PSDebug -Step代替。它们并不相同,但是如果熟练地运用,它们将更加强大。


2

丑陋:

PS > get-content foo.ps1|foreach-object{$_;invoke-expression "$_"}
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
powershell
PS > get-content foo.ps1
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
PS >

上面的问题是,如果您有这样的多行命令:

foreach($proc in $procs){
  $proc.processname
}

如果将上面的示例放在具有该结构的foo.ps1中,则上述操作将失败。


是的,我一直在寻找这样的半解法。我真的认为我没有想要的“银弹”。感谢您对这些解决方案的创意。我现在有两个选择,必须决定从这里出发。
纳尔逊·罗瑟梅尔

2
help about_History 

会告诉你所有的命令和

Get-History [options]  

将返回完整列表供您操作\显示等。


2
我找到了“ set-psdebug -trace 1”,它将显示命令,但是我不需要很多额外的“噪音”。get-history在脚本中不输出任何内容。如果可以的话,我可以将其粘贴在脚本的末尾,但是命令不会内联(在命令输出之前),并且任何异常都将跳过它(除非我当然抓住了它)。请记住,这仍然是一个好主意...还有其他想法吗?
纳尔逊·罗瑟梅尔

嗯-您是要捕获输入和输出,还是至少要立即回显输入命令以及相应的输出?一种方法是将结果推入数组,然后遍历get-history结果并输出命令,再输出命令。
Helvick 2010年

start-transcript也许也可以满足您的需求,但仅限于操作中的控制台文本部分。
Helvick 2010年

您明白了-与批处理文件的工作方式相同。现在我们有一堆批处理文件,我正在研究用PowerShell脚本替换这些文件的可行性。我们拥有用于计划,维护输出历史记录等的软件。如果不回显输入命令,则调试起来会更加困难。我猜要推送结果需要您在每个命令上执行此操作,确保您捕获异常等,以便您不会错过任何内容。另一种选择,但不是我想要的。我们可能只需要选择一个选项并运行它即可。
纳尔逊·罗瑟梅尔

我尝试了start-transcript,但它只记录了它已启动/停止,但中间没有任何记录。我在某处阅读了用于交互式命令的内容。
纳尔逊·罗瑟梅尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.