PowerShell中的Echo等效脚本测试

phi*_*ill 214 powershell

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

我该怎么做?

例如,PowerShell与以下PHP代码等效的是什么?

echo "filesizecounter: " . $filesizecounter 
Run Code Online (Sandbox Code Playgroud)

Ric*_*ard 257

有几种方法:

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

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

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

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

附加:在PSH2中(至少)使用cmdlet绑定的脚本将自动获取-Verbose-Debug切换参数,本地启用Write-VerboseWrite-Debug(即覆盖首选项变量)作为编译的cmdlet和提供程序.

  • Write-Debug和Write-Verbose的优点在于您可以将调试语句保留在代码中,只需在需要时使用适当的首选项变量打开输出.节省时间,对于您的其他功能用户来说是一个很好的功能. (4认同)
  • 您还希望熟悉Out-String,因为对于任何非平凡的对象,您需要使用它将对象转换为可显示的字符串,然后再使用这三个Write-*cmdlet中的任何一个. (4认同)

Jus*_* R. 107

Powershell有一个别名映射echo Write-Output,所以:

echo "filesizecounter : $filesizecounter"

  • `echo`是`Write-Output`的别名,按照微软的[TechNet](https://technet.microsoft.com/en-us/library/hh849921.aspx)讨论[here](http:// stackoverflow的.com /一个/八十五万七千二百零九分之一千七百六十二万三千九百零二) (6认同)
  • 如果您只想将"调试"输出回显到控制台以跟踪脚本的执行,为什么不想绕过管道?Write-Output有一个奇怪的副作用,其中最后一次调用Write-Output的内容将保留在堆栈中,覆盖您尝试从函数显式返回的任何变量.像这样的副作用对于语言表现来说是一种非常棘手的方式. (3认同)
  • 谢谢Glenn,自我发布此字以来的6年中,别名似乎已重新映射。很好,真的不应该使用Write-Host,因为它绕过了管道。我已更新我的回复以表明这一点。谢谢! (2认同)

Joh*_*n T 29

PowerShell插值,不是吗?

在PHP中

echo "filesizecounter: " . $filesizecounter 
Run Code Online (Sandbox Code Playgroud)

也可以写成:

echo "filesizecounter: $filesizecounter" 
Run Code Online (Sandbox Code Playgroud)

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

Write-Host "filesizecounter: $filesizecounter"
Run Code Online (Sandbox Code Playgroud)

  • PHP与这个问题无关 (2认同)

aph*_*ria 23

Write-Host "filesizecounter : " $filesizecounter 
Run Code Online (Sandbox Code Playgroud)


Goy*_*uix 14

到目前为止,在powershell中回显的最简单方法是创建字符串对象并让管道输出它:

$filesizecounter = 8096
"filesizecounter : $filesizecounter"
Run Code Online (Sandbox Code Playgroud)

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


小智 9

echo是Write-Output的别名,尽管它看起来与Write-Host相同.

它不是PowerShell中echo和Write-Host有什么区别?.

echo是Write-Output的别名,它写入Success输出流.这允许通过管道处理输出或重定向到文件.Write-Host直接写入控制台,因此无法进一步重定向/处理输出.


小智 8

写主机工作正常.

$Filesize = (Get-Item $filepath).length;
Write-Host "FileSize= $filesize";
Run Code Online (Sandbox Code Playgroud)


Rus*_*ert 7

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

Get-Alias echo
Run Code Online (Sandbox Code Playgroud)

得到回应:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output
Run Code Online (Sandbox Code Playgroud)

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

gal echo
Run Code Online (Sandbox Code Playgroud)

其他别名列于此处: https://learn.microsoft.com/en-us/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


Pet*_*ter 5

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

"filesizecounter: " + $filesizecounter
Run Code Online (Sandbox Code Playgroud)

它应该输出:

文件大小计数器:值


lau*_*jpn 5

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

Set-PSDebug -Trace 1
Run Code Online (Sandbox Code Playgroud)

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

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