3

Я хотел бы подавить любой вывод, тогда вызывается 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 ответа2

2

Спасибо @PetSerAl, это должно сработать, даже если оно не так чисто, как я надеялся :-)

&{Set-Alias Out-Default Out-Null; Get-WindowsUpdateLog ...}
0

Я узнал, что это возможно, кроме того, что он все еще немного сломан. Пример:

   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

Проблема в том, что он работает СЛИШКОМ хорошо, потому что, скажем, вы хотите сохранить объект в возвращаемом varable.

   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 для всего сценария, не беспокоясь о нарушении сценария.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .