Meminta / mengeksekusi perintah dengan jumlah parameter yang tidak diketahui, di PowerShell

1

Ingin mengeksekusi Invoke-Expression dengan parameter yang dapat bervariasi tergantung pada input

Memiliki masalah dengan $MyArgs logika. Seharusnya hanya berisi parameter yang dimasukkan

Masukan (contoh):

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

Keluaran:

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

Kode:

    [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
igor
sumber
Saya bisa menggunakan Command, tetapi eksekusi akan dilakukan di localhost
igor

Jawaban:

1

Kami akan menggunakan tiga fitur PowerShell:

  • Operator panggilan, &, memanggil perintah yang namanya dapat ditentukan oleh ekspresi. Tidak seperti itu Invoke-Expression, ia dapat menangani parameter terikat tanpa meregangkan segalanya.
  • Itu $PSBoundParameters variabel adalah hashtable dari parameter yang ditentukan untuk cmdlet saat ini dan nilainya.
  • Pukulan seperti kebalikan dari $PSBoundParameters: ia menggunakan hashtable sebagai parameter terikat ke cmdlet.

Menyatukan semuanya, kami mengganti Anda Invoke-Expression doa dengan ini, memanggil cmdlet yang namanya parameter set nama dan meneruskannya semua parameter fungsi:

& $PSCmdlet.ParameterSetName @PSBoundParameters
Ben N
sumber
Keren, bekerja seperti yang diharapkan, kesederhanaan adalah jenius :) Hanya belajar cara menggunakan parameter di PowerShell, jadi sangat menghargai informasi dan penjelasan tambahan
igor