일부 디버깅 정보를 출력하는 함수를 구현하고 싶습니다. 나는이 기능을 원하는 즉, 다음과 같은 방법으로 작업 "- 푸 쓰기"powershell 함수에서 매개 변수 이름을 얻는 방법
Write-Foo $SomeThing
# the output will be "SomeThing: (the value of Something)"
가이 기능을 구현 할 수 있습니까? 함수의 매개 변수 이름을 얻는 방법을 모르겠습니다.
감사
일부 디버깅 정보를 출력하는 함수를 구현하고 싶습니다. 나는이 기능을 원하는 즉, 다음과 같은 방법으로 작업 "- 푸 쓰기"powershell 함수에서 매개 변수 이름을 얻는 방법
Write-Foo $SomeThing
# the output will be "SomeThing: (the value of Something)"
가이 기능을 구현 할 수 있습니까? 함수의 매개 변수 이름을 얻는 방법을 모르겠습니다.
감사
또 다른 가능성 (전달하려는 매개 변수의 이름이 아니라 인수로 전달 된 변수의 이름)을 표시 할 수 있습니다.
function Write-Foo($varName)
{
$var =
($MyInvocation.line -replace '\s*write-foo\s*\$','').trim()
'{0}: {1}' -f $var,$varName
}
$something = 'Hello'
write-foo $something
something: Hello
이없이 이름을 전달하면 쉽게 년대 $
function Write-Foo($varName)
{
$var = Get-Variable $varName
'{0}: {1}' -f $var.Name,$var.Value
}
$something = 'Hello'
write-foo something
something: Hello
거 야 디버그 스트림에 당신이 그것으로 파이프 라인을 오염시키지 않도록 서면의 또한 두 번째 @Ansgar Weicher의 제안 .
당신이 원하는이 가까이 :
function Write-Foo($varName)
{
$varVal = $ExecutionContext.InvokeCommand.ExpandString("`$variable:$varName")
Write-Host "$($varName): $varVal"
}
그것을 밖으로 시도 :
function Write-Foo($msg) {
Write-Host ("SomeThing: {0}" -f $msg)
}
:
PS> $SomeThing = 'hello'
PS> Write-Foo SomeThing
SomeThing: hello
는이 같은 함수를 정의 할 수 있습니다 또는 (outpu를 원한다면 t이 같은) 추가 처리를 위해 사용할 수 그러나
function Write-Foo($msg) {
"SomeThing: {0}" -f $msg
}
, 당신은 출력이 더 나은 방법이 될 수있는 기존의 Write-Debug
cmdlet를 사용하여, 디버깅 정보를 원하는 것을 가입일 :
PS C:\>Write-Debug 'foo'
PS C:\>$DebugPreference
SilentlyContinue
PS C:\>$DebugPreference = 'Continue'
PS C:\>Write-Debug 'foo'
DEBUG: foo
또 다른 취
function Write-Foo($varName)
{
$v = Get-Variable $varName
Write-Host ($v.Name + ": " + $v.Value)
}
결과 :
PS C:\> $Something = "nothing"
PS C:\> Write-Foo SomeThing
Something: nothing
,
당신은 $MyInvocation.BoundParameters
을 통해 함수의 매개 변수에 액세스 할 수 있습니다, 그래서 이것은 당신이 원하는 것을 할 수있다 :
function Write-Foo($varName) {
foreach ($key in $MyInvocation.BoundParameters.Keys) {
Write-Verbose ("{0}: {1}" -f ($key, $MyInvocation.BoundParameters[$key])) -Verbose
}
}
Write-Foo "Hello"
을 출력은 다음과 같습니다 : 당신이시기를 제어 할 수있게하려면
VERBOSE: varName: Hello
디버그 정보는 cmdlet에이 점을 설정할 수 있습니다 나타납니다
function Write-Foo {
[CmdletBinding()]
Param ($varName)
foreach ($key in $MyInvocation.BoundParameters.Keys) {
Write-Verbose ("{0}: {1}" -f ($key, $MyInvocation.BoundParameters[$key]))
}
}
Write-Foo "Hello"
Write-Foo "This will debug" -Verbose
과 첫 번째 호출 더 OU를 생산하지 두 번째는 다음과 같이 표시됩니다.
VERBOSE: Verbose: True
VERBOSE: varName: This will debug
자연스럽게 디버그 정보를 출력하는 방법을 선택할 수 있습니다. 일반적으로 Write-Debug
(일반적으로 각 출력 행을 묻는 메시지) 또는 Write-Verbose
(일반적으로 표시되지 않음)이 여기에 적합합니다.