Перенаправление вывода в $null в PowerShell, но обеспечение сохранения переменной
У меня есть код:
$foo = someFunction
Это выводит предупреждающее сообщение, которое я хочу перенаправить на $null:
$foo = someFunction > $null
Проблема заключается в том, что когда я делаю это, успешно сдерживая предупреждающее сообщение, он также имеет отрицательный побочный эффект НЕ заселения $foo результатом функции.
Как перенаправить предупреждение на $null, но все равно сохраняйте $foo?
Также, как вы перенаправляете как стандартный вывод, так и стандартную ошибку в null? (В Linux это 2>&1
.)
Ответы
Ответ 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]