none
Hashtable zu Object? RRS feed

  • Frage

  • Hallo,

    ich komme gerade mit einem Script, welches ich erstellen möchte nicht weiter. Ich möchte einen Hashtable zu einen Objekt konvertieren, das will aber nicht ganz klappen. Ich habe folgenden Hashtable:

    Name                           Value
    ----                           -----
    1                              plugin1.exe
    2                              plugin2.exe

    Diesen Hashtable möchte ich in ein Objekt konvertieren, damit ich es weiter verarbeiten kann. Allerdings bekomme ich folgende Ausgabe wenn ich versuche das Objekt zu erstellen:

    PS C:\Users\Frank> $test = New-Object PSObject -Property $hash
    PS C:\Users\Frank> $test

    1                                                           2
    -                                                           -
    plugin1.exe                                               plugin2.exe

    Was ich eigentlich will, ist ein Objekt welches die Spalten "Nummer" und "Name" enthält:

    Number                     Name
    ----                           -----
    1                              plugin1.exe
    2                              plugin2.exe

    Hat jemand einen Tipp wie ich das bewerkstelligen kann?

    Viele Grüße, Frank

     

    Montag, 22. April 2013 21:14

Antworten

  • Hallo,

    versuche es mal damit.

    $Hash = @{1='plugin1.exe';2='plugin2.exe';3='plugin3.exe'}
    $myValues = @()
    ForEach ($Key in $Hash.Keys) {
       $Obj =  New-Object PSObject
       Add-Member -InputObject $Obj -Name 'Number' -Value $Key -MemberType NoteProperty
       Add-Member -InputObject $Obj -Name 'Name' -Value $Hash.$Key -MemberType NoteProperty
       $myValues += $Obj	
    }
    $myValues

    Beste Gruesse
    brima
    Dienstag, 23. April 2013 20:29

Alle Antworten

  • $Hash = @{1='plugin1.exe';2='plugin2.exe';3='plugin3.exe'}
    
    # So
    
    ForEach ($Key in $Hash.Keys) {
       $Obj =  New-Object PSObject
       Add-Member -InputObject $Obj -Name 'Number' -Value $Key -MemberType NoteProperty
       Add-Member -InputObject $Obj -Name 'Name' -Value $Hash.$Key -MemberType NoteProperty
       $Obj
    }
    
    
    # oder so (ist schneller)
    
    $New = New-Object PSObject
    ForEach ($Key in $Hash.Keys) {
       $New | Select-Object @{Name='Number';Expression={$Key}},@{Name='Name';Expression={$Hash.$Key}}
    }


    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!

    Dienstag, 23. April 2013 06:48
  • Super, funktioniert. Vielen Dank.
    Dienstag, 23. April 2013 18:07
  • Leider funktioniert das doch nicht wie erwartet:

    PS D:\> $Hash = @{1='plugin1.exe';2='plugin2.exe';3='plugin3.exe'}
    PS D:\>
    PS D:\> ForEach ($Key in $Hash.Keys) {
    >>    $Obj =  New-Object PSObject
    >>    Add-Member -InputObject $Obj -Name 'Number' -Value $Key -MemberType NoteProperty
    >>    Add-Member -InputObject $Obj -Name 'Name' -Value $Hash.$Key -MemberType NoteProperty
    >>    $Obj
    >> }
    >>

                                                         Number Name
                                                         ------ ----
                                                              3 plugin3.exe
                                                              2 plugin2.exe
                                                              1 plugin1.exe

    PS D:\>

    Aber die Variable enthält immer nur den letzten Wert:

    PS D:\>
    PS D:\> $Obj

                                                         Number Name
                                                         ------ ----
                                                              1 plugin1.exe

    Wie schafft man es das das Objekt alle Werte enthält?

    Grüße, Frank

    Dienstag, 23. April 2013 18:50
  • Hallo,

    versuche es mal damit.

    $Hash = @{1='plugin1.exe';2='plugin2.exe';3='plugin3.exe'}
    $myValues = @()
    ForEach ($Key in $Hash.Keys) {
       $Obj =  New-Object PSObject
       Add-Member -InputObject $Obj -Name 'Number' -Value $Key -MemberType NoteProperty
       Add-Member -InputObject $Obj -Name 'Name' -Value $Hash.$Key -MemberType NoteProperty
       $myValues += $Obj	
    }
    $myValues

    Beste Gruesse
    brima
    Dienstag, 23. April 2013 20:29
  • Danke, jetzt klappt es.
    Mittwoch, 24. April 2013 12:02