PowerShell에서 출력을 $ null로 리디렉션하지만 변수가 설정되어 있는지 확인


83

몇 가지 코드가 있습니다.

$foo = someFunction

이것은 $ null로 리디렉션하려는 경고 메시지를 출력합니다.

$foo = someFunction > $null

문제는 내가 이것을 할 때 경고 메시지를 성공적으로 억제하면서도 함수의 결과로 $ foo를 채우지 않는 부정적인 부작용이 있다는 것입니다.

경고를 $ null로 리디렉션하지만 여전히 $ foo는 채워져 있습니까?

또한 표준 출력과 표준 오류를 모두 null로 리디렉션하는 방법은 무엇입니까? (Linux에서는 2>&1.)


1
경고 메시지를 생성하는 것은 무엇입니까? 의 작성자 인 someFunction경우 적절하게 변경할 수 있습니다.
stej

실제로 Bourne Shell (Linux)에서는 2>/dev/null 1>/dev/null; 표시된 리디렉션은 stderr을 stdout과 동일한 위치로 리디렉션합니다.이 위치는 /dev/null이거나 일반 파일 일 수 있습니다.
jpaugh

답변:


153

표준 출력 (기본 PowerShell)을 리디렉션하는 데이 방법을 선호합니다.

($foo = someFunction) | out-null

그러나 이것도 작동합니다.

($foo = someFunction) > $null

"someFunction"의 결과로 $ foo를 정의한 후 표준 오류 만 리디렉션하려면 다음을 수행하십시오.

($foo = someFunction) 2> $null

이것은 위에서 언급 한 것과 사실상 동일합니다.

또는 "someFunction"에서 표준 오류 메시지를 리디렉션 한 다음 결과로 $ foo를 정의합니다.

$foo = (someFunction 2> $null)

둘 다 리디렉션하려면 몇 가지 옵션이 있습니다.

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

이 솔루션은 (괄호) 대신 {중괄호}로 문을 감싼 후에 저에게 효과적이었습니다. 최신 PS 버전을 사용하고있을 수 있습니다.
ManEatingCheese

그리고 우리가 백그라운드 작업을 생성하는 경우 작업 자체가 필요합니다.{ myCommandWithAnyOutput & } | Out-Null
arberg


10

숨기고 싶은 오류라면 이렇게 할 수 있습니다

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

4

경고 메시지는 Write-Warningcmdlet을 사용하여 작성해야 합니다. 이렇게 하면 -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는 해당 메시지 유형에 대해 유사한 기능을 제공합니다.


0

함수 사용 :

function run_command ($command)
{
    invoke-expression "$command *>$null"
    return $_
}

if (!(run_command "dir *.txt"))
{
    if (!(run_command "dir *.doc"))
    {
        run_command "dir *.*"
    }
}

또는 한 줄짜리를 좋아한다면 :

function run_command ($command) { invoke-expression "$command  "|out-null; return $_ }

if (!(run_command "dir *.txt")) { if (!(run_command "dir *.doc")) { run_command "dir *.*" } }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.