none
Hashtable als Übergabeparameter RRS feed

  • Frage

  • Hallo,

    kann leider nicht in meinem Thread antworten, also muss ich einen neuen aufmachen.

    Wenn ich in meinem ps1-Skript ein weiters aufrufen möchte und diesem eine Hastable übergeben will, ist das möglich? Bisher verdonnert PS mich bei jeder Aufrufvariante zu einem String.

    hier das Codebeispiel:

    [hashtable]$pw_enc=@{user1="bla"; user2="blub"; user3="blablub"} &"DB_Skript.ps1 $pw_enc" #oder invoke-expression DB_Skript.ps1 $pw_enc

    #erste Zeile des DB_Skript.ps1:
    param([hashtable]$pw_enc)

    Bin ich gezwungen die Ergebnisse der Hashtable in ein String zu packen und dann im damit ausgeführten Skript den String wieder auseinander zu nehmen?


    Freitag, 8. März 2013 11:47

Antworten

  • Folgendes Funktioniert bei mir!
    [hashtable]$pw_enc=@{user1="bla"; user2="blub"; user3="blablub"}
    
    # nackter aufruf mit dem Pfad des Scriptes
    C:\Temp\Test-Ziel.ps1 $pw_enc
    
    # wenn das script im gleich Ordner liegt dann nimmt man den Punkt Operator
    # (Leerzeichen beachten!)
    . \Test-Ziel.ps1 $pw_enc
    
    # Das & Funktioniert auch!
    # (Leerzeichen beachten!)
    # Argumente nicht in den String einbauen!
    & "C:\Temp\Test-Ziel.ps1" $pw_enc
    
    # eigentlich das gleiche wie Lösung 1 ;-)
    Invoke-command -ScriptBlock {C:\Temp\Test-Ziel.ps1 $pw_enc}



    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Bearbeitet Peter Kriegel Samstag, 9. März 2013 11:39
    • Als Antwort vorgeschlagen Alex Pitulice Montag, 11. März 2013 08:24
    • Als Antwort markiert NiuBee Montag, 11. März 2013 12:58
    Freitag, 8. März 2013 12:19

Alle Antworten

  • Folgendes Funktioniert bei mir!
    [hashtable]$pw_enc=@{user1="bla"; user2="blub"; user3="blablub"}
    
    # nackter aufruf mit dem Pfad des Scriptes
    C:\Temp\Test-Ziel.ps1 $pw_enc
    
    # wenn das script im gleich Ordner liegt dann nimmt man den Punkt Operator
    # (Leerzeichen beachten!)
    . \Test-Ziel.ps1 $pw_enc
    
    # Das & Funktioniert auch!
    # (Leerzeichen beachten!)
    # Argumente nicht in den String einbauen!
    & "C:\Temp\Test-Ziel.ps1" $pw_enc
    
    # eigentlich das gleiche wie Lösung 1 ;-)
    Invoke-command -ScriptBlock {C:\Temp\Test-Ziel.ps1 $pw_enc}



    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Bearbeitet Peter Kriegel Samstag, 9. März 2013 11:39
    • Als Antwort vorgeschlagen Alex Pitulice Montag, 11. März 2013 08:24
    • Als Antwort markiert NiuBee Montag, 11. März 2013 12:58
    Freitag, 8. März 2013 12:19
  • Wenn eine Funkion einen HashTable annimmt, wird in der Regel nach festen Keys gesucht. So zumindest arbeiten cmdlets wie Format-Table oder Select-Object. Um eine ähnliche Funkion zu haben kann man den HashTable über einen Script Validator überprüfen.

    Ansonten verhält sich ein Parameter vom Typ HashTable nicht anders als einer vom Typ String.

     

    function Use-Hash
    {
        param(
            [Parameter(Mandatory = $true)]
            [ValidateScript({
                $validKeys = 'FirstName','LastName','ID'
                $areKeysValid = $true
                foreach ($key in $_.Keys)
                {
                    if ($validKeys -notcontains $key)
                    {
                        $areKeysValid = $false
                    }
                }
                return $areKeysValid
            })]
            [hashtable]$AccountInfo
        )
        $AccountInfo
    }
    Use-Hash -AccountInfo @{ FirstName = 'John'; LastName = 'Doe'; ID = '123' }


    -Raimund

    • Als Antwort vorgeschlagen Alex Pitulice Montag, 11. März 2013 08:24
    Freitag, 8. März 2013 19:08