Подтвердить что ты не робот

Перенаправление вывода в $null в PowerShell, но обеспечение сохранения переменной

У меня есть код:

$foo = someFunction

Это выводит предупреждающее сообщение, которое я хочу перенаправить на $null:

$foo = someFunction > $null

Проблема заключается в том, что когда я делаю это, успешно сдерживая предупреждающее сообщение, он также имеет отрицательный побочный эффект НЕ заселения $foo результатом функции.

Как перенаправить предупреждение на $null, но все равно сохраняйте $foo?

Также, как вы перенаправляете как стандартный вывод, так и стандартную ошибку в null? (В Linux это 2>&1.)

4b9b3361

Ответ 1

Я бы предпочел, чтобы этот способ перенаправил стандартный вывод (собственный PowerShell)...

($foo = someFunction) | out-null

Но это тоже работает:

($foo = someFunction) > $null

Чтобы перенаправить только стандартную ошибку после определения $foo с результатом "someFunction", do

($foo = someFunction) 2> $null

Это фактически то же самое, что указано выше.

Или перенаправить любые стандартные сообщения об ошибках из "someFunction", а затем определить $foo с результатом:

$foo = (someFunction 2> $null)

Чтобы перенаправить оба варианта, у вас есть несколько вариантов:

2>&1>$null
2>&1 | out-null

Ответ 2

Это должно работать.

 $foo = someFunction 2>$null

Ответ 3

Если это ошибки, которые вы хотите скрыть, вы можете сделать это следующим образом:

$ErrorActionPreference = "SilentlyContinue"; #This will hide errors
$someObject.SomeFunction();
$ErrorActionPreference = "Continue"; #Turning errors back on

Ответ 4

Предупреждающие сообщения должны быть записаны с помощью командлета Write-Warning, который позволяет предупреждать сообщения с параметром -WarningAction или автоматической переменной $WarningPreference. Функция должна использовать CmdletBinding для реализации этой функции.

function WarningTest {
    [CmdletBinding()]
    param($n)

    Write-Warning "This is a warning message for: $n."
    "Parameter n = $n"
}

$a = WarningTest 'test one' -WarningAction SilentlyContinue

# To turn off warnings for multiple commads,
# use the WarningPreference variable
$WarningPreference = 'SilentlyContinue'
$b = WarningTest 'test two'
$c = WarningTest 'test three'
# Turn messages back on.
$WarningPreference = 'Continue'
$c = WarningTest 'test four'

Чтобы сделать это короче в командной строке, вы можете использовать -wa 0:

PS> WarningTest 'parameter alias test' -wa 0

Write-Error, Write-Verbose и Write-Debug предлагают аналогичную функциональность для соответствующих типов сообщений.

Ответ 5

Предполагая, что сообщение об ошибке сначала возвращается:

 $foo = someFunction
 $foo = $foo[1]

Если значение переменной возвращается сначала:

 $foo = someFunction
 $foo = $foo[0]