2012-06-22 1 views
8

Ich möchte eine bestehende Commandlet mit einer dynamischen Anzahl von Parametern aufzurufen.Wie übergebe ich dynamische Parameter in Powershell?

Anstatt dies zu tun (unter Write-Host als Beispiel), würde Ich mag es, die intelligente Art und Weise zu tun.

# these are the dynamic parameters which maybe get passed into my function or script 
# they would be $null be default of course 
$forecolor = 'Green' 
$newline = $true 

# now build the "dynamic" write-host... 
if ($forecolor) { 
    if ($newline) { 
     write-host -fore $forecolor "Hello world" 
    } 
    else { 
     write-host -fore $forecolor "Hello world" -nonewline 
    } 
} 
else { 
    if ($newline) { 
     write-host "Hello world" 
    } 
    else { 
     write-host "Hello world" -nonewline 
    } 
} 

Das ist natürlich sehr hässlich. Hilf mir, es hübscher zu machen!

Ich habe bereits versucht nur $forecolor = '-fore Green' Einstellung, die nur die Ausgänge „-fore Grün Hallo Welt“. Ich könnte daran denken, eine Liste von Argumenten an eine Funktion zu übergeben und für jedes Argument in der Liste den entsprechenden Parameter hinzuzufügen - ich weiß einfach nicht, wie man die Parameter hält.

+0

Haben Sie bei Parametersätze hatte einen Blick? http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/30/use-parameter-sets-to-simplify-powershell-commands.aspx –

+0

David, wie würden diejenigen helfen hier? Ich bin verwirrt. ! – Joey

Antwort

16

Sie können nur Ihre Variablen als Argumente an Write-Host passieren:

Write-Host -Fore $forecolor -NoNewLine:(!$newline) 'Hello World' 

Für eine wirklich dynamische Weise können Sie eine Hash-Tabelle verwenden können:

$params = @{ NoNewLine = $true; ForegroundColor = 'Green' } 

und dann das Splat-Operator

Write-Host @params Hello World 
verwenden

Sie Parameter und deren Werte in die Hash-Tabelle hinzufügen können, wie Sie möchten vor Write-Host auf diese Weise aufrufen.

+4

** ehrfürchtig ** Hier ist ein Artikel über splatting: http://technet.microsoft.com/en-us/magazine/gg675931.aspx nie zuvor von dieser wizardry gehört. Vielen Dank. –

+0

Ich arbeite seit Jahren mit PowerShell und habe noch nie davon gehört. Jetzt endlich, habe ich: Tolles Feature! – AstralisSomnium