none
Strings als Parameternamen benutzen RRS feed

  • Frage

  • Hallo,

    ich programmiere derzeit eine grafische Oberfläche, mit der man Exchange Mailkontos erstellen kann ... die Textfelder werden dynamisch anhand einer csv Datei erstellt. Mit den eingegebenen Daten erstelle ich anschließend mit New-Mailbox ein neues Konto und setze mit Set-User die eingegebenen Attribute. Da nicht immer die selben Textfelder vorhanden sind, möchte ich gerne dynamisch über die vorhandenen drüber iterieren und jeweils Set-User aufrufen ... jetzt die eigentliche Frage:

    ist es möglich Strings als Parameternamen zu benutzen ... etwa so:

     

    $attr_name = "-FirstName"
    $attr_val = "Karl"
    
    Set-User $attr_name $attr_val
    

     


    ich habe schon sehr viel gegooglet, jedoch nichts zu der Problematik gefunden. Invoke-Expression ist keine Lösung, da z.B der Passwort-Parameter vom Typ Secure String sein muss, weshalb ein einfaches zusammenbauen des Befehls nicht funktioniert. Ich freue mich über jede Hilfe.

    mfg chumbalum


    Sonntag, 28. August 2011 13:34

Antworten

  • Stimmt. Du hast recht, der secure-string wird in einen einfachen String umgewandelt. Um das zu vermeiden, kannst du aber die Erstellung des secure-string auch zur Laufzeit des "invoke-expression"-codes durchführen.

    Ein Beispiel mit "New-AdUser", das vom Prinzip her genauso funktioniert:

    $com = "New-AdUser "
    $p1 = "-name "
    $p1val = "test001 "
    $p2 = "-AccountPassword "
    $p2val = "(ConvertTo-SecureString 'geheimespasswort' -AsPlainText -Force)"
    
    Invoke-Expression ($com+$p1+$p1val+$p2+$p2val)
    


    Das Passwort "geheimespasswort" könntest du in Zeile 5 auch wieder durch einen String ersetzen, falls gewünscht.

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Sonntag, 28. August 2011 21:44
    Moderator

Alle Antworten

  • Ich sehe nicht warum Invoke-Expression nicht funktionieren soll. Wenn du einen Securestring brauchst, machst du dir einfach einen:

    $secpass = ConvertTo-SecureString "geheimespasswort" -AsPlainText -Force
    

    Und ansonsten baust du dir deinen Befehl nach dem Prinzip $a = "kommando ", $b= "-parametername ", $c = "parameterwert" ---> invoke-expression ($a+$b+$c) zusammen.

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Sonntag, 28. August 2011 17:40
    Moderator
  • der Passwort Parameter ist Teil des Befehls. den ich ausführen will .. wenn ich jetzt den SecureString an einen normalen String hänge und dann invoke-expression darauf anwende, meckert er, dass der Parameter nicht vom Typ SecureString ist.
    Sonntag, 28. August 2011 19:28
  • Stimmt. Du hast recht, der secure-string wird in einen einfachen String umgewandelt. Um das zu vermeiden, kannst du aber die Erstellung des secure-string auch zur Laufzeit des "invoke-expression"-codes durchführen.

    Ein Beispiel mit "New-AdUser", das vom Prinzip her genauso funktioniert:

    $com = "New-AdUser "
    $p1 = "-name "
    $p1val = "test001 "
    $p2 = "-AccountPassword "
    $p2val = "(ConvertTo-SecureString 'geheimespasswort' -AsPlainText -Force)"
    
    Invoke-Expression ($com+$p1+$p1val+$p2+$p2val)
    


    Das Passwort "geheimespasswort" könntest du in Zeile 5 auch wieder durch einen String ersetzen, falls gewünscht.

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Sonntag, 28. August 2011 21:44
    Moderator
  • Danke für die Hilfe :)

    Solche Tricks sind eher selten in der Standardliteratur erwähnt.

     

    MfG chumbalum

    Freitag, 2. September 2011 07:24