sourcecode

PowerShell에서 Write-Debug 출력을 콘솔에 표시하려면 어떻게 해야 합니까?

copyscript 2023. 10. 31. 22:32
반응형

PowerShell에서 Write-Debug 출력을 콘솔에 표시하려면 어떻게 해야 합니까?

저는 PowerShell을 배우고 있으며 Write-Host를 사용하여 새로운 PowerShell 스크립트 파일에서 변수 할당을 확인하고 있었습니다.그 때 저는 이것이 나쁜 생각이라는 기사를 읽었습니다.

그래서 나는 .ps1 파일에서 다음과 같은 문장을 바꿨습니다.

Write-Host "Start"
Write-Host "End"

... 이 경우:

Write-Debug "Start"
Write-Debug "End"

Windows PowerShell ISE에서 저장된 스크립트를 실행했을 때 콘솔에 출력이 기록되지 않았습니다.첨부했습니다-debug다음과 같이 스크립트를 호출하는 문장에 대해 설명합니다.

PS E:\trialrun> .\MyScript.ps1 -debug

하지만 역시 출력이 콘솔에 기록되지 않습니다.Write-Debug를 잘못 사용하고 있는 것 같습니다.디버그 출력을 콘솔에 기록하려면 어떻게 해야 합니까?

tl;dr:

  • 달려.$DebugPreference = 'Continue'산출량을 보기 시작하다Write-Debug부름.

  • 작업이 완료되면 기본 설정 변수 복원$DebugPreference기본값으로 설정합니다.$DebugPreference = 'SilentlyContinue'

  • 주어진 cmdlet 또는 고급 기능에 대해서만 디버그 출력을 켜려면-Debug공통 파라미터

    • 주의 사항: Windows PowerShell(PowerShell [Core] v6+에서는 더 이상 사용되지 않음)에서는 다음과 같은 대화형 디버깅 프롬프트가 표시됩니다.Write-Debug문이 있습니다.

출력 여부Write-Debug인쇄된 문장은 두 가지 메커니즘에 의해 제어됩니다.

  • Scope-wide: 선호도 변수의 값에 의해 결정됩니다. -

  • cmdlet 또는 고급 스크립트/함수를 호출할 때 명령 범위가 지정된 Ad-hoc.$DebugPreferencevalue)에 공통 파라미터를 사용합니다. 참조.

$DebugPreference기본값:SilentlyContinue, 그래서 당신은 왜 당신이 어떤 결과물도 보지 못하는지 설명해 줍니다.Write-Debug기본적으로 문장이 있습니다.

common parameter를 사용할 때, 당신은 효과적으로$DebugPreference 호출된 명령에 한해 다음을 수행합니다.

  • Windows PowerShell에서는 항상값을 값으로 설정합니다. 이 값은 메시지인쇄만 아니라 이러한 문이 있을 마다 일시 중지되어 어떻게 진행할지 묻습니다.

  • PowerShell [Core] v6+에서는 이제 값이 (보다 감각적으로) 로 설정됩니다.

    • 사용자 지정 스크립트 또는 기능을 통해-Debugcommon parameter, 고급 매개 변수여야 하며, 다음과 함께 선언됩니다.[CmdletBinding()]그것의 속성param()마티아스의 대답이 보여주듯, 블록.

Windows PowerShell에서는 이러한 모든 상황에서의Write-Debug 신속한 호출 동작이 중단적일 수 있으므로 더 나은 접근 방식이 될 수 있습니다.명시된 바와 같이 PowerShell [Core] v6+에서는 이 문제가 더 이상 관심사가 아닙니다.

참고: 고급 기능 또는 스크립트 내부에서 다음을 구분하려는 경우$DebugPreference호출자 대 공통 파라미터에 의해 선호 변수로 설정된 경우 -Debug전달되었습니다(함수/스크립트-로 번역됨).$DebugPreference변수), 사용$PSBoundParameters.ContainsKey('Debug');$true는 것을 나타냅니다.-Debug사용되었습니다.


참고 공문서 : https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-debug

기본적으로 디버그 메시지는 콘솔에 표시되지 않지만 디버그 매개 변수 또는 $DebugPreference 변수를 사용하여 표시할 수 있습니다.

당신은 필요할 것입니다.CmdletBinding공통 매개 변수를 지원하려면 스크립트에 속성을 지정합니다(다음 포함).-Debug):

[CmdletBinding()]
param()

Write-Debug Start
Write-Debug End

도움 파일을 한 번 보는 게 좋을 것 같습니다.

배치하면$DebugPreference = 'Continue'각 모듈 기능의 프로세스 블록에서 의도한 대로 작동합니다.약간의 중복은 있지만, 다른 솔루션들이 제안한 것들보다 훨씬 쉽습니다.

언급URL : https://stackoverflow.com/questions/45289719/with-powershell-how-can-i-get-write-debug-output-to-appear-in-the-console

반응형