2016-10-06 4 views
0

Ich habe eine Liste von Benutzern, und ich möchte ihre Gruppennamen exportieren, sortiert A-Z. Das folgende Skript funktioniert nicht in der internen Schleife ForEach-Object.Powershell - Mitgliedschaft der Benutzergruppe aus Textdatei

Get-Content users.txt | ForEach-Object { 
    $user = $_; 

    Get-ADUser –Identity $user –Properties MemberOf | Select-Object -ExpandProperty MemberOf | sort 

    ForEach-Object { 

     New-Object PSObject -property @{User=$user;Group=$_;} 

    } 
} | Export-Csv -Path 'your_file_path.csv' -NoTypeInformation 
+0

Was ist das Ziel der Verbesserung? Lesbarkeit? CPU-Effizienz? Speichereffizienz? Geschwindigkeit? Fehlerbehandlung? –

+0

Ich denke, es funktioniert ', weil das verschachtelte 'foreach-Objekt' keine Eingabe hat. – TessellatingHeckler

+0

Sie müssen die Frage dann klären, damit die Leser wissen, was Sie brauchen. –

Antwort

0

Die ForEach-Object sitzt nur da draußen allein - man muss entweder Rohr ein Objekt, um es, oder das Objekt einer Variablen zuweisen und stattdessen foreach eine Schleife durch das Objekt verwenden. Ich habe den zweiten Ansatz unten genommen, da eine übermäßige Verrohrung das Lesen von Skripten erschwert (für mich).

Get-Content c:\temp\users.txt | ForEach-Object { 
    $user = $_; 

    $AdUser = Get-ADUser –Identity $user –Properties MemberOf | Select-Object -ExpandProperty MemberOf | get-adgroup | select -ExpandProperty Name | sort 

    foreach($group in $AdUser) { 

     New-Object PSObject -property @{User=$user;Group=$group;} | Export-Csv -Path 'c:\temp\out.csv' -NoTypeInformation -Append 

    } 
} 

... und wenn Sie es mit dem Rohr und verwenden möchten ForEach-Object, brauchen Sie nur eine Pfeife nach der sort zu setzen und die Export-Csv so bewegen, dass sie das neue Objekt exportiert, die erstellt wurde:

Get-Content c:\temp\users.txt | ForEach-Object { 
    $user = $_; 

    Get-ADUser –Identity $user –Properties MemberOf | Select-Object -ExpandProperty MemberOf | get-adgroup | select -ExpandProperty Name | sort | 

    ForEach-Object { 
     New-Object PSObject -property @{User=$user;Group=$_;} | Export-Csv -Path 'c:\temp\out.csv' -NoTypeInformation -Append 
    } 
} 
+0

hunkle - Vielen Dank für die Antwort. Ich habe eine Liste von Benutzern, ich möchte pro Benutzergruppe Memeship-Namen nur von A-Z sortieren und dann nur ihre Gruppenmitgliedschaftsnamen exportieren. Dieses Skript exportiert die CH # Plus OU usw. Wie kann ich das Skript bitte verbessern? Danke – kbriaz

+0

@kbriaz Ich habe die Antwort aktualisiert, so dass die Ausgabe nur die Gruppennamen enthält, nicht zu definierten Namen. –

+0

Vielen Dank. Script funktioniert wie Magie, es exportiert alle Gruppennamen der Benutzer in der Liste. Ich erhalte jedoch einen Fehler im PowerShell-Fenster. (get-adgroup: Kann kein Objekt mit Identität finden: 'CN = \ # XXX Vereinigtes Königreich Alle (1), OU = XXX Gruppen, OU = XXX Gruppen, DC = XXX, DC = XXX, DC = XX' unter: 'DC = XX, DC = XXX, DC = XXX') Irgendeine Idee warum? Sollte ich es einfach ignorieren? Da der Export die Daten enthält, die ich brauche. Entschuldigen Sie die Probleme und bedanken Sie sich nochmals für Ihre Hilfe. Ta – kbriaz

Verwandte Themen