Написать-Хост и войти в одну строку?

Я очень новичок в 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"]"

Спасибо за любую помощь!

2 ответа

Решение

Вы можете использовать конвейер с ForEach-Object командлет (% это его встроенный псевдоним) следующим образом:

"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 работал бы тоже.)

Ты можешь использовать Tee-Object Командлет для копирования потока конвейера в файл:

"Node Id is $($nodeProps["NodeID"])" |Tee-Object -FilePath C:\dev\test2.txt -Append |Write-Host
Другие вопросы по тегам