Rufen Sie den Befehl mit einer unbekannten Anzahl von Parametern in PowerShell auf

543
igor

Ausführen Invoke-Expressionmit Parametern, die je nach Eingabe variieren können

Ich habe ein Problem mit der $MyArgsLogik. Es sollte nur eingegebene Parameter enthalten

Eingabe (Beispiel):

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

Ausgabe:

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

Code:

 [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
Ich könnte `Command` verwenden, aber die Ausführung erfolgt auf localhost igor vor 5 Jahren 0

1 Antwort auf die Frage

1
Ben N

Wir werden drei PowerShell-Funktionen verwenden:

  • Der Aufrufoperator &ruft einen Befehl auf, dessen Name durch einen Ausdruck angegeben werden kann. Im Gegensatz Invoke-Expressiondazu kann es gebundene Parameter behandeln, ohne alles zu stringifizieren.
  • Die $PSBoundParametersVariable ist eine Hashtabelle aus den Parametern des aktuellen Cmdlets und deren Werten.
  • Das Aufteilen ist wie das Gegenteil von $PSBoundParameters: Es verwendet eine Hashtabelle als gebundene Parameter für ein Cmdlet.

Zusammengefasst ersetzen wir Ihren Invoke-ExpressionAufruf damit, rufen ein Cmdlet auf, dessen Name der Parametersatzname ist, und übergibt alle Parameter der Funktion:

& $PSCmdlet.ParameterSetName @PSBoundParameters 
Cool, funktioniert wie erwartet, Einfachheit ist genial :) Lernen Sie einfach, wie man Parameter in PowerShell verwendet, um die zusätzlichen Informationen und Erklärungen zu schätzen igor vor 5 Jahren 0