2

我对 PowerShell 很陌生,并且自学了它。我的问题是你可以在同一行上使用'write-host'和'log-write'作为一个动作运行吗?

我所拥有的是:

Write-Host "Node Id is $nodeProps["NodeID"]" 
LogWrite "Node Id is $nodeProps["NodeID"]"

但我想知道是否有办法做到这一点:

Write-Host, LogWrite "Node Id is $nodeProps["NodeID"]"

感谢您的任何帮助!

4

2 回答 2

5

您可以使用带有ForEach-Objectcmdlet 的管道(%是它的内置别名),如下所示:

"Node Id is $($nodeProps["NodeID"])" | % { Write-Host $_; LogWrite $_ }

请注意$nodeProps["NodeID"]需要如何将引用包含在内$(...)才能工作。

如果您反复需要它,请定义一个(简单)函数:

function writeAndLog([string] $msg) { Write-Host $msg; LogWrite $msg }

writeAndLog "Node Id is $($nodeProps["NodeID"])"

PS:由campbell.rw的评论提示:

如果您不喜欢在单个输入项上使用-ForEach-Object通常用于循环多个输入对象 -的想法,则可以使用脚本块调用运算符&

& { Write-Host $args[0]; LogWrite $args[0] } "Node Id is $($nodeProps["NodeID"])"

$args是所有(未绑定)参数的集合,因此$args[0]指的是第一个。(在这种特殊情况下,仅引用$args也可以。)

于 2016-12-20T23:02:40.900 回答
3

您可以使用Tee-Objectcmdlet将管道流复制到文件:

"Node Id is $($nodeProps["NodeID"])" |Tee-Object -FilePath C:\dev\test2.txt -Append |Write-Host
于 2016-12-20T23:28:10.283 回答