programing

Powershell에서 -Verbose 인수가 주어졌는지 확인할 수 있습니까?

skycolor 2023. 8. 25. 23:27
반응형

Powershell에서 -Verbose 인수가 주어졌는지 확인할 수 있습니까?

나는 나만의 Powershell 로깅 기능을 작성했습니다.Log매개 변수 포함stream(메시지를 작성할 스트림) 및message(작성할 메시지).

콘솔과 로그 파일 모두에 출력을 기록할 수 있습니다.함수에서 수행하는 작업은 기본적으로 메시지를 게시할 스트림(스위치 문 포함)을 결정한 다음 스트림과 로그 파일에 메시지를 기록하는 것입니다.

switch ($stream) {
    Verbose {
        Write-Output "$logDate [VERBOSE] $message" | Out-File -FilePath $sgLogFileName -Append
        Write-Verbose $message
        break
    }
}

문제는 이제 -Verbose 인수가 주어졌는지 확인할 수 있느냐는 것입니다.

-Verbose가 제공된 경우에만 메시지를 로그 파일에 쓰는 것이 목표입니다.

다음 도움말 문서를 이미 살펴보았지만 도움이 되는 내용을 찾지 못했습니다.
도움말 정보_매개 변수
도움말 정보_공통 매개 변수

또한 -WhatIf 매개 변수는 Write-Verbose에서 작동하지 않습니다.

답변 감사합니다!

스크립트 내에서 다음을 확인합니다.

$PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent

사용 가능:매개 변수 '$VerbosePreference'를 확인합니다.'SilentContinue'로 설정된 경우 명령줄에 $Verbose가 지정되지 않았습니다.'$Continue'로 설정된 경우 설정된 것으로 가정할 수 있습니다.

다음과 같은 다른 일반적인 매개 변수에도 적용됩니다.

Name                           Value
----                           -----
DebugPreference                SilentlyContinue
VerbosePreference              SilentlyContinue
ProgressPreference             Continue
ErrorActionPreference          Continue
WhatIfPreference               0
WarningPreference              Continue
ConfirmPreference              High

MSDN 블로그 페이지에서 오래전에 가져온...그래서 상대적으로 오래된 버전의 파워셸과 관련이 있을 것입니다.Powershell v4의 "Get-Help about_CommonParameters"도 참조하십시오.

더 일반적으로: -Verbose를 지정할 수 있으므로:$false 명령행에서 다음 코드가 해당 사례를 처리합니다.다른 스위치 파라미터에도 적용됩니다.

$Verbose = $false
if ($PSBoundParameters.ContainsKey('Verbose')) { # Command line specifies -Verbose[:$false]
    $Verbose = $PsBoundParameters.Get_Item('Verbose')
}

같은 답을 찾다가 우연히 발견했고, 좋은 정보를 찾았지만, 좋지 않은 정보도 있었습니다.표시된 답변은 날짜가 지정된 것으로 보이며 코멘트대로 정확하지 않습니다.MyInvocation 개체의 PSBoundParameter 속성 개체가 IsPresent 속성이 포함되지 않은 Dictionary(PoSH 5.1 up이 이전에 확인하지 않았을 수 있음)입니다.또한 질문자는 다른 답변에서 이 옵션을 제시한 $VerbosePreference를 고려하는 것을 잊었습니다.

다음은 간편하고 간편한 솔루션입니다.

if ( $PSBoundParameters['Verbose'] -or $VerbosePreference -eq 'Continue' ) {
   # do something
}

$PSBoundParameters는 해시 테이블 개체입니다. 값이 존재하고 true이면 true로 평가되고, 존재하지 않거나 true가 아닌 경우 false로 평가됩니다.세션 수준에서 설정된 VerbosePreference는 값이 Continue일 때 상세 내역을 표시합니다.논리 또는 를 사용하는 조건에서 이것을 조합하면 자세한 출력이 필요할 경우 정확한 표현을 얻을 수 있습니다.

-Verbose 변수, 모수, 사고려 을 고려합니다.Write-VerboseWrite-Host: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-verbose?view=powershell-7.1

언급URL : https://stackoverflow.com/questions/24446680/is-it-possible-to-check-if-verbose-argument-was-given-in-powershell

반응형