2016-06-27 6 views
3

Ich habe eine Funktion, die ungefähr wie folgt aussieht:Powershell - nur Argument-Namen verwenden

function plk(){ 
    $cmd = $args -join ' ' 
    plink [email protected] -i key.ppk $cmd 
} 

Diese Funktion funktioniert gut, jedoch möchte ich ein neues Argument hinzuzufügen, die es mir ermöglichen, den Server zu ändern (aber keep myserver als Standard, wenn ich meinen Server nicht nenne). so änderte ich meinen Code dazu:

function plk($server = 'myserver'){ 
    $cmd = $args -join ' ' 
    plink [email protected]$server -i key.ppk $cmd 
} 

jedoch Powershell scheint zu glauben, dass mein erstes Argument ist mein $server variabel.

Bedeutung, wenn ich meine Funktion wie verwenden: plk ls /folder, PowerShell würde denken, dass ls$server ist.

Ich möchte das beheben, nur wenn ich tue: plk -server 'server' ls /folder, PowerShell würde den Server wechseln, und mit plk ls /folder würde meine Standard verwenden.

Antwort

1

Ich würde die Parameter in einem Param Block definieren, einen Parameter für $Server und einen für die restlichen $Arguments hinzufügen.

Dann könnten Sie die ValueFromRemainingArguments Eigenschaft:

Das zeigt ValueFromRemainingArguments Argument, dass der Parameter alle Parameter-Werte im Befehl akzeptiert, dass nicht auf andere Parameter der Funktion zugeordnet sind.

Quelle: about_Functions_Advanced_Parameters

Script:

function plk 
{ 
    Param 
    (
     [Parameter(ValueFromRemainingArguments=$true)] 
     [string[]]$Arguments, 

     [Parameter(Mandatory=$false)] 
     [string]$Server = 'myServer' 
    ) 

    $cmd = $Arguments -join ' ' 
    plink [email protected]$Server -i key.ppk $cmd 
} 
+1

Hast du mein Skript versucht? –

+0

ja, hat nicht funktioniert. es dachte, mein erstes Argument sei der Server. – GKman

+0

Sie haben Recht, ich habe mein Skript geändert. Bitte versuche es erneut. –

Verwandte Themen