Полезность различных подходов в значительной степени будет зависеть от вашего варианта использования, конечно, но ...
Я считаю, что "правильный" способ сделать это, если у вас есть контроль надсценарии (и это то, что я обычно делаю, хотя по общему признанию я искал ярлык сегодня), "перегрузить" Write-Host
, так сказать, и затем отправить все, что вы хотите 'Мы отправили Write-Host
этой новой функции.
Чтобы остаться с действительными глаголами PowerShell, я называю мои Write-Feedback
.
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
Write-Host -BackgroundColor $BackgroundColor -ForegroundColor $ForegroundColor $msg;
}
Итак, теперь у вас есть функцияэто работает по существу идентично Write-Host
, но вы можете легко контролировать, куда выводится.Если вам нужно записать в файл, вы можете отредактировать Write-Feedback
, чтобы все его вызовы теперь делали все, что вам нужно.
Вы можете просто изменить строку на Write-Output
, в зависимости от того,делать что-нибудь еще по конвейеру ...
...
Write-Output $msg;
Вы можете отправить вывод в тот же файл, в который вы отправляете остальную часть команды, но внутри функции Write-Feedback
, даже сохраняяWrite-Host тоже:
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
Write-Host -BackgroundColor $BackgroundColor -ForegroundColor $ForegroundColor $msg;
$msg | Out-File "./export.txt" -Append; # <<< or add a param to location
}
Или, если у вас есть несколько выбросов, где вы не хотите, чтобы содержимое Write-Feedback
передавалось в файл, вы можете добавить новый необязательный параметр, который спрашивает, чтоделать с каждым конкретным Write-Feedback
вызовом, который вы switch
отключаете - и отправлять в файл, на Write-Host
, на Write-Output
и т. д., изменяя значение по умолчанию на то, что вы обычно хотите, и явно switch
ingот нового параметра, где он явно установлен.
и т. д., и т. д. Просто намного проще перенаправить все ваши звонки в централизованный расчетный центр для вывода в PowerShell.Затем, когда вы делаете передумаете, это не огромный поиск и замена - и замена - задания.
Я думаю, что единственная боль здесь будет, если вы не захотитедля отправки по конвейеру, так что Write-Output
отсутствует, но он действительно хотел убедиться, что файл Write-Feedback
, в который был записан файл, совпадает с тем, который вы указали в > export.txt
из своего примера, не редактируя Write-Feedback
каждый раз,Я не уверен, есть ли простой способ сделать это.
Но так как вы уже были бы на шаг отстранены от своего "шага трубы", это, вероятно, недопустимый вариант использования.
Как бы то ни было, суть в том, чтобы перегрузить Write-Host
и делать все что угодно, редактируя в одном месте.