PowerShell에서 알 수 없는 개수의 매개변수를 사용하여 명령 호출/실행

PowerShell에서 알 수 없는 개수의 매개변수를 사용하여 명령 호출/실행

Invoke-Expression입력에 따라 달라질 수 있는 매개변수를 사용하여 실행하고 싶습니다.

논리 에 문제가 있습니다 $MyArgs. 입력한 매개변수만 포함해야 합니다.

입력(예):

./foo.ps1 -Name aa -Server bb -Datastore cc

산출:

Get-VM -Name aa -Server bb -Datastore cc

암호:

    [cmdletbinding(DefaultParameterSetName='Get-VM')]
    Param(
        #Common params
        [Parameter(ParameterSetName='Get-VM')]
        [Parameter(ParameterSetName='Get-Datastore')]
        [Parameter(Position = 0)]
        [String]$Name,     

        [Parameter(ParameterSetName='Get-VM')]
        [Parameter(ParameterSetName='Get-Datastore')]
        [Parameter(Position = 1)]
        [String]$Server,

        #Get-VM params
        [Parameter(ParameterSetName='Get-VM')]
        [String]$Datastore,
        [Parameter(ParameterSetName='Get-VM')]
        .
        .
        .

        #Get-Datastore params
        [Parameter(ParameterSetName='Get-Datastore')]
        [String]$Datacenter,        
        .
        .
        .
    )

Invoke-Expression -Command "$PSCmdlet.ParameterSetName $MyArgs" \\ <--- here is my problem

답변1

우리는 세 가지 PowerShell 기능을 사용할 것입니다:

  • 호출 연산자는 &표현식으로 이름을 지정할 수 있는 명령을 호출합니다. 와 달리 Invoke-Expression모든 것을 문자열화하지 않고 바인딩된 매개변수를 처리할 수 있습니다.
  • 변수 $PSBoundParameters는 현재 cmdlet에 지정된 매개 변수와 해당 값의 해시 테이블입니다.
  • 스플래팅반대입니다 $PSBoundParameters. 해시 테이블을 cmdlet에 대한 바인딩된 매개 변수로 사용합니다.

모든 것을 종합하면 Invoke-Expression호출을 다음으로 대체하여 이름이 매개 변수 집합 이름인 cmdlet을 호출하고 모든 함수의 매개 변수를 전달합니다.

& $PSCmdlet.ParameterSetName @PSBoundParameters

관련 정보