PowerShell中与Echo等效的脚本测试

Echo equivalent in PowerShell for script testing

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

我该怎么做?

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

1
echo"filesizecounter:" . $filesizecounter


有几种方法:

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

Write-Debug:如果$DebugPreference设置为Continue或Stop,则直接写入控制台。

Write-Verbose:如果$VerbosePreference设置为Continue或Stop,则直接写入控制台。

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

附加功能:(至少)在PSH2中,使用cmdlet绑定的脚本将自动获取-Verbose-Debug开关参数,就像编译的cmdlet和提供程序一样,在本地启用Write-VerboseWrite-Debug(即覆盖首选项变量)。


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

echo"filesizecounter : $filesizecounter"


PowerShell插值,不是吗?

在PHP中

1
echo"filesizecounter:" . $filesizecounter

也可以写成:

1
echo"filesizecounter: $filesizecounter"

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

1
Write-Host"filesizecounter: $filesizecounter"


1
Write-Host"filesizecounter :" $filesizecounter

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

1
2
$filesizecounter = 8096
"filesizecounter : $filesizecounter"

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


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

在PowerShell中,echo和Write-Host之间没有什么区别?

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


写主机工作正常。

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

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

1
"filesizecounter:" + $filesizecounter

它应该输出:

filesizecounter: value


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

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

1
2
3
get-content .\scriptname.PS1
script code
script code

....


PowerShell具有几个常见命令(如echo)的别名。在PowerShell中键入以下内容:

1
Get-Alias echo

得到回应:

1
2
3
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output

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

1
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