none
out-string, join, verständnisfrage RRS feed

  • Frage

  • moin,

    wenn ich mit out-string einen String erhalte müsste ja eigentlich ein -join möglich sein. Wie müsste da die Syntax aussehen?

    get-adgroupmember -id "GruppeX" | select samaccountname | out-string  | gm
    
    
       TypeName: System.String
    

    eine Lösung für das Problem habe ich - jedoch mit anderer Schreibweise. Mich hätte jedoch interessant warum out-string -join nicht erlaubt ist obwohl es bereits ein String ist bzw. wie man es schreiben müsste.

    get-adgroupmember -id "GruppeX" | select samaccountname | out-string  -join ","

    Lösung mit anderer Syntax

     (get-adgroupmember -id "GruppeX").samaccountname -join ","


    Chris

    Donnerstag, 23. Februar 2017 07:08

Antworten

  • Hallo,

    ganz einfach, out-string gibt dir genau einen String aus, mit -join kannst Du String_s_ verbinden.

    $a = get-adgroupmember -id "GroupXYZ" | select samaccountname | Out-String
    $a[1]
    
    
    $a[2]
    s
    $a = (get-adgroupmember -id "GroupXYZ").samaccountname
    $a[1]
    MemberA
    $a[2]
    MemberB

    Du kannst auch jeweils das Ergbnis von Get-Member -InputObject $a vergleichen, im ersten Fall ist es ein String, im zweiten ein Array mit String_s_

    Beste Gruesse
    brima



    • Bearbeitet brima Donnerstag, 23. Februar 2017 08:37
    • Als Antwort markiert -- Chris -- Donnerstag, 23. Februar 2017 12:14
    Donnerstag, 23. Februar 2017 08:28
  • Hallo,

    Out-String -join ","


    ist deshalb nicht erlaubt, weil Out-String keinen Parameter -join hat. Wenn du -join direkt hinter ein Cmdlet schreibst, wird es als Parameter interpretiert. Beachte auch die entsprechende Färbung in der ISE.

    Wenn du -join als Operator verwenden willst, musst du mit Klammern anzeigen, dass es nicht mehr zum Cmdlet gehört:

    ( ... | Out-String) -join ","

    Die ... stehen natürlich für deine vorherigen Befehle.

    Viele Grüße

    Christoph

    • Als Antwort markiert -- Chris -- Donnerstag, 23. Februar 2017 12:14
    Donnerstag, 23. Februar 2017 10:15
  • wobei ( ... | Out-String) -join ","

    keinen Sinn macht, weil die Klammer nach Auflösung wegen dem Out-String genau einen String liefert, also läuft der -join danach in leere.

    Einfach mal vergleichen was raus kommt.

    (get-adgroupmember -id "GroupXYZ" | Select-Object  samaccountname | Out-String) -join ','
    (get-adgroupmember -id "GroupXYZ" | Select-Object  samaccountname) -join ','
    (get-adgroupmember -id "GroupXYZ" | Select-Object -ExpandProperty samaccountname) -join ','
    (get-adgroupmember -id "GroupXYZ").samaccountname -join ','


    Beste Gruesse
    brima



    • Bearbeitet brima Donnerstag, 23. Februar 2017 11:26
    • Als Antwort markiert -- Chris -- Donnerstag, 23. Februar 2017 12:14
    Donnerstag, 23. Februar 2017 11:20

Alle Antworten

  • Hallo,

    ganz einfach, out-string gibt dir genau einen String aus, mit -join kannst Du String_s_ verbinden.

    $a = get-adgroupmember -id "GroupXYZ" | select samaccountname | Out-String
    $a[1]
    
    
    $a[2]
    s
    $a = (get-adgroupmember -id "GroupXYZ").samaccountname
    $a[1]
    MemberA
    $a[2]
    MemberB

    Du kannst auch jeweils das Ergbnis von Get-Member -InputObject $a vergleichen, im ersten Fall ist es ein String, im zweiten ein Array mit String_s_

    Beste Gruesse
    brima



    • Bearbeitet brima Donnerstag, 23. Februar 2017 08:37
    • Als Antwort markiert -- Chris -- Donnerstag, 23. Februar 2017 12:14
    Donnerstag, 23. Februar 2017 08:28
  • Hallo,

    Out-String -join ","


    ist deshalb nicht erlaubt, weil Out-String keinen Parameter -join hat. Wenn du -join direkt hinter ein Cmdlet schreibst, wird es als Parameter interpretiert. Beachte auch die entsprechende Färbung in der ISE.

    Wenn du -join als Operator verwenden willst, musst du mit Klammern anzeigen, dass es nicht mehr zum Cmdlet gehört:

    ( ... | Out-String) -join ","

    Die ... stehen natürlich für deine vorherigen Befehle.

    Viele Grüße

    Christoph

    • Als Antwort markiert -- Chris -- Donnerstag, 23. Februar 2017 12:14
    Donnerstag, 23. Februar 2017 10:15
  • wobei ( ... | Out-String) -join ","

    keinen Sinn macht, weil die Klammer nach Auflösung wegen dem Out-String genau einen String liefert, also läuft der -join danach in leere.

    Einfach mal vergleichen was raus kommt.

    (get-adgroupmember -id "GroupXYZ" | Select-Object  samaccountname | Out-String) -join ','
    (get-adgroupmember -id "GroupXYZ" | Select-Object  samaccountname) -join ','
    (get-adgroupmember -id "GroupXYZ" | Select-Object -ExpandProperty samaccountname) -join ','
    (get-adgroupmember -id "GroupXYZ").samaccountname -join ','


    Beste Gruesse
    brima



    • Bearbeitet brima Donnerstag, 23. Februar 2017 11:26
    • Als Antwort markiert -- Chris -- Donnerstag, 23. Februar 2017 12:14
    Donnerstag, 23. Februar 2017 11:20
  • Brima,

    danke nochmals für die interessanten Tipps und Beispiele.

    das heißt, eine Klammer liefert nicht unbedingt gleichzeitig einen String retour - interessant.


    Chris

    Donnerstag, 23. Februar 2017 13:35
  • Nein, eine Klammer liefert prinzipiell überhaupt nichts. Es ist nur die Anweisung, den innenliegenden Teil zuerst abzuarbeiten.

    Out-String gehört für mich zu den Cmdlets, die ich nie benutze, weil ich es irgendwie sinnlos finde. Wenn ein Objekt kein String ist, kann ich doch mit der ToString-Methode viel besser bestimmen, was ich genau als String herausbekomme.

     
    Freitag, 24. Februar 2017 08:22