PowerShell中与Echo等效的脚本测试


233

我想通过设置标志并查看整个脚本中的数据来在PowerShell脚本中输出变量和值。

我该怎么做?

例如,相当于以下PHP代码的PowerShell将是什么?

echo "filesizecounter: " . $filesizecounter 

查看PowerGUI随附的脚本编辑器/调试器。它可能适合您的工作。我知道Powershell 2也带有调试器(但我还没有尝试过)。
dan-gph

Answers:


275

有几种方法:

Write-Host:直接写入控制台,不包括在function / cmdlet输出中。允许设置前景色和背景色。

Write-Debug:如果$DebugPreference设置为“继续”或“停止” ,则直接写入控制台。

Write-Verbose:如果$VerbosePreference设置为“继续”或“停止” ,则直接写入控制台。

后者旨在提供额外的可选信息,Write-Debug用于调试(因此似乎适合这种情况)。

其他:在PSH2中(至少),使用cmdlet绑定的脚本将自动获取-Verbose-Debug切换参数,就像编译的cmdlet和提供程序一样,在本地启用Write-VerboseWrite-Debug(即覆盖优先级变量)。


4
关于Write-Debug和Write-Verbose的好处是,您可以将调试语句保留在代码中,并在需要时使用适当的首选项变量打开输出。节省时间,对于您的函数的其他用户而言,这是一个不错的功能。
JasonMArcher

5
您还希望熟悉Out-String,因为对于任何非平凡的对象,在使用这三个Write- * cmdlet中的任何一个之前,需要使用该对象将对象转换为可显示的字符串。
Jaykul

113

Powershell具有别名映射回显到Write-Output,因此:

echo "filesizecounter : $filesizecounter"


7
echoWrite-OutputMicrosoft TechNet的别名,并在此进行
Glenn Lawrence

2
谢谢Glenn,自我发布此字以来的6年中,别名似乎已重新映射。很好,真的不应该使用Write-Host,因为它绕过了管道。我已更新我的回复以表明这一点。谢谢!
贾斯汀·

3
如果您要做的就是将“调试”输出回显到控制台以跟踪脚本的执行情况,那么为什么不绕过管道呢?Write-Output具有一个怪异的副作用,其中最后一次调用Write-Output的内容将保留在堆栈上,从而覆盖了您尝试从函数显式返回的所有变量。这样的副作用对于语言的表现来说就像是一种非常棘手的方式。
Craig

33

PowerShell插值,不是吗?

在PHP中

echo "filesizecounter: " . $filesizecounter 

也可以写成:

echo "filesizecounter: $filesizecounter" 

在PowerShell中,类似这样的东西应该适合您的需求:

Write-Host "filesizecounter: $filesizecounter"

9
PHP与这个问题
无关-reggaeguitar


14

到目前为止,在powershell中进行回显的最简单方法是创建字符串对象,然后由管道将其输出:

$filesizecounter = 8096
"filesizecounter : $filesizecounter"

当然,当不使用Write- *方法时,您确实会放弃一些灵活性。



8

写主机工作正常。

$Filesize = (Get-Item $filepath).length;
Write-Host "FileSize= $filesize";

5

我不知道这样做是否明智,但您可以写

"filesizecounter: " + $filesizecounter

它应该输出:

filesizecounter:值


1
"filesizecounter: $filesizecounter"更短。
jiggunjer '16

3

PowerShell有几个常用命令的别名,例如echo。在PowerShell中键入以下内容:

Get-Alias echo

得到回应:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output

甚至Get-Alias也有一个别名gal -> Get-Alias。您可以编写gal echo以获取的别名echo

gal echo

其他别名在此处列出:https : //docs.microsoft.com/zh-cn/powershell/scripting/learn/using-familiar-command-names?view=powershell-6

cat dir mount rm cd echo move rmdir chdir erase popd sleep clear h ps sort cls history pushd tee copy kill pwd type del lp r write diff ls ren


2

试试看Get-Content .\yourScript.PS1,您将看到脚本的内容。

您也可以在您的股票代码中插入以下行:

get-content .\scriptname.PS1
script code
script code

....


不显示已处理的实际值(例如env var替换),因此不回答所提问题。
iisystems

0

还应该提到的是,Set-PSDebug与老式的echo on批处理命令类似:

Set-PSDebug -Trace 1

此命令将显示执行脚本的每一行:

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

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.