PowerShell v5: подавление вывода по умолчанию во вложенных функциях
Я хотел бы подавить любой вывод, тогда вызывается function_b:
Function function_a {
"test" | Out-Default
}
function function_b {
[CmdletBInding()]
param()
function_a
}
# These are the things I've tried so far to no avail:
[void](function_b)
$null = function_b
function_b | out-null
function_b *>&1 | Out-null
В Windows 10 внесено изменение в ведение журнала Центра обновления Windows. Теперь все регистрируется на каналах ETL вместо "$env:SystemDrive\Windows\WindowsUpdate.log". Чтобы получить журналы в удобочитаемом формате, вы должны сгенерировать WindowsUpdateLog с помощью команды Get-WindowsUpdateLog, которая выдает на консоль множество бесполезных вещей, которые я хотел бы подавить. Оказывается, команда является частью модуля, а все вспомогательные функции в Get-WindowsUpdateLog используют Out-Default. Мой пример иллюстрирует способ построения этого модуля.
2 ответа
Спасибо @PetSerAl, это должно сработать, хотя и не так чисто, как я надеялся:-)
&{Set-Alias Out-Default Out-Null; Get-WindowsUpdateLog ...}
Я узнал, что это возможно, кроме того, что он все еще немного сломан. Пример:
PS> function out-default {$input | out-null}
#ok. Works great
PS> mkdir xyz
# output directory object is sent to null and not displayed to out-host
Проблема в том, что он работает СЛИШКОМ хорошо, потому что, допустим, вы хотите сохранить объект в возвращаемом объекте.
PS> $dir = mkdir xyz2
PS> $dir
#nothing to returned!
С другой стороны, переопределение out-default легко удалить:
PS> del function:out-default
Теперь ожидаемое поведение по умолчанию отменено:
PS> $dir = mkdir xyz3
PS> $dir
Directory: C:\Users\john\sandbox\tmp2
Mode LastWriteTime Length Name
--- ------------- ------ ----
--- 12/19/2017 1:26 PM xyz3
PS> mkdir xyz4
Directory: C:\Users\john\sandbox\tmp2
Mode LastWriteTime Length Name
--- ------------- ------ ----
--- 12/19/2017 1:26 PM xyz4
Было бы хорошо, если бы назначение переменной было отдельным от out-default. Потому что тогда вы можете просто оставить out-default назначенным out-null для всего сценария, не беспокоясь о нарушении сценария.