Написать-Хост и войти в одну строку?
Я очень новичок в 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