programing

PowerShell에서 명명된 매개 변수를 [ref]로 정의하는 방법

yellowcard 2023. 10. 27. 21:50
반응형

PowerShell에서 명명된 매개 변수를 [ref]로 정의하는 방법

사용하려고 합니다.[ref]이름이 지정된 매개 변수.그러나 오류가 발생합니다.

workflow Test
{
    Param([Parameter(Mandatory=$true)][String][ref]$someString)

    write-verbose $someString -Verbose
    $someString = "this is the new string"
}

cls
$someString = "hi"
Test -someString [ref]$someString
write-host $someString

#Error: Cannot process argument transformation on parameter 'someString'. Reference type is expected in argument.

이 문제를 해결하려면 어떻게 해야 합니까?

[ref] 매개 변수 예제에서 "workflow"를 사용하고 있음을 확인했습니다.단순화를 위해 "기능"이라고 부르고 나중에 "워크플로우"로 돌아가도록 합시다.

코드를 변경해야 할 세 가지 사항이 있습니다.

  1. [ref] 매개변수를 함수로 전달할 때 매개변수를 괄호 안에 넣어야 합니다.().
  2. 함수 내에서 [ref] 파라미터를 사용할 경우 $variable.value를 참조합니다.
  3. 매개 변수 정의에서 [string] type을 제거합니다.[string], [ref]일 수 있지만 둘 다는 아닙니다.

작동하는 코드는 다음과 같습니다.

function Test
{
    Param([Parameter(Mandatory=$true)][ref]$someString)

    write-verbose $someString.value -Verbose
    $someString.value = "this is the new string"
}
cls
$someString = "hi"
Test -someString ([ref]$someString)
write-host $someString

"워크플로우"에 관해서는.PowerShell Workflow는 매우 제한적입니다. 제한사항.특히 워크플로우 내의 개체에서는 메서드를 호출할 수 없습니다.이렇게 하면 선이 끊어집니다.

$someString.value = "this is the new string"

워크플로우에서 [ref] 매개변수를 사용하는 것은 워크플로우 제한 때문에 실용적이지 않다고 생각합니다.

파워셸 함수에서 참조 매개변수 사용에 대한 정보를 검색할 때 첫 구글 히트작이었기 때문에 저는 이 보완적인 매우 단순한 답변을 작성해야 한다고 느꼈습니다.함수가 아닌 워크플로우에 대한 질문이었지만:

함수에서 참조 매개변수 사용 예제(워크플로우와 함께 작동하지 않음):

Function myFunction ([ref]$aString) {
    $aString.Value = "newValue";
}
$localVariable = "oldValue"
Write-Host $localVariable # Outputs: oldValue
myFunction ([ref]$localVariable);
Write-Host $localVariable # Outputs: newValue

함수를 사용하면 매개 변수를 다음과 같이 참조 및 다른 유형으로 정의할 수 있습니다(워크플로우에서는 정의할 수 없음).

Function myFunction ([ref][string]$aString) {
    $aString.Value = "newValue";
}
$localVariable = "oldValue"
Write-Host $localVariable # Outputs: oldValue
myFunction ([ref]$localVariable);
Write-Host $localVariable # Outputs: newValue

Jan의 의견에 동의합니다. 워크플로우 제한(객체에 대한 메서드 호출) 때문에 워크플로우에서 참조 매개 변수를 사용하려고 하면 안 됩니다.https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/02/powershell-workflows-restrictions/

언급URL : https://stackoverflow.com/questions/29596634/how-to-define-named-parameter-as-ref-in-powershell

반응형