none
Powershell Ergebnis in ein Excel File schreiben. RRS feed

  • Frage

  • Hallo

    Ich möcht alle aktiven AD User anzeigen lassen, die Mitglied von Gruppen sind die mit "SEC_" beginnen.

    Get-QADUser -enabled -identity * -SizeLimit 0 | ForEach-Object { $_.SamAccountName ;Get-QADMemberOf 
    $_.SamAccountName | where-object {$_.SamAccountName -like "SEC_*" } | Select-Object name}

     

    Als Ergebnis bekomme ich folgendes

    User1   #es wird keine Gruppe angezeigt, da er in keine "SEC_" Gruppe ist

    User2   #es wird die "SEC_Group1" angezeigt.

    SEC_Group1

    User3   #da derUser Mitglied von 2 Gruppen ist, die mit "SEC_" anfangen , werden dies auch angezeigt.

    SEC_Group1

    SEC_Group2

     

    Jetzt möchte ich dieses Ergebnis in ein Excel File bringen, und es sollte so aussehen.

    Habt ihr hier ein Tipp für mich, wie ich das realisieren kann.

    Danke




    • Bearbeitet Andi-Willi Freitag, 7. September 2012 14:27
    Freitag, 7. September 2012 14:17

Antworten

  • Wenn man mit der PowerShell Arbeitet, sollte man sich mit Objekten etwas auskennen!
    http://www.it-visions.de/lserver/artikeldetails.aspx?b=4479
    http://www.nt4admins.de/themen/powershell/artikel/objektorientierung-in-der-powershell.html

    Da brauchst du natürlich ein IF:

    Get-QADUser -enabled -identity * -SizeLimit 0 | ForEach-Object {
        
        # Gruppen des Users mit suchfilter Auslesen
        $Gruppen = Get-QADMemberOf $_.SamAccountName -Name 'SEC_*' | Select-Object SamAccountName
        
        # Wenn $Gruppen.count grösser ist als 0 dann wurde(n) Gruppe(n) gefunden    
        If ($Gruppen.count -gt 0 ) { 
        # User hat eine oder mehrere gesuchte Gruppe(n) 
        
            # Alle gefundenen Gruppen mit Usernamen ausgeben
            Foreach ($Gruppe in $Gruppen) {
                # Objekt anlegen
                $Obj = New-Object -TypeName PSObject
                # User Namens Property anlegen
                Add-Member -InputObject $Obj -Name 'Name' -Value $_.SamAccountName -MemberType NoteProperty
                # Gruppen Property anlegen und mit dem Gruppennamen füllen
                Add-Member -InputObject $Obj -Name 'Gruppe' -Value $Gruppe.SamAccountName -MemberType NoteProperty
                # Objekt ausgeben
                $Obj        
            } 
        }
        Else { # User hat keine gesuchte Gruppe 
              
            # Objekt anlegen
            $Obj = New-Object -TypeName PSObject
            # User Namens Property anlegen
            Add-Member -InputObject $Obj -Name 'Name' -Value $_.SamAccountName -MemberType NoteProperty
            # leeres Gruppen Property anlegen
            Add-Member -InputObject $Obj -Name 'Gruppe' -Value '' -MemberType NoteProperty
            # Objekt ausgeben
            $Obj
        }
    } |  Export-Csv 'C:\temp\test.xls' -NoTypeInformation -Delimiter "`t" # Ausgabe in eine Exceldatei (Win 97 Format)


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    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' '


    • Bearbeitet Peter Kriegel Dienstag, 11. September 2012 09:42
    • Als Antwort markiert Andi-Willi Dienstag, 11. September 2012 14:26
    Dienstag, 11. September 2012 09:38
  • Hallo Peter

    Das Script funktioniert jetzt.

    Hab nur mehr die Zeile

    If ($Gruppen.count -gt 0 ) { 

    auf

    If (@($Gruppen).count -gt 0)  {

    durch den Befehl  If ($Gruppen.count -gt 0) wurden die User, die nur Mitglied von einer Gruppe sind, nicht ausgegeben.

    Dank für die Unterstützung

    Andi

    • Als Antwort markiert Andi-Willi Dienstag, 11. September 2012 14:26
    Dienstag, 11. September 2012 14:26

Alle Antworten

  • Ich konnte das jetzt nicht testen aber ich würde es so machen:

    Get-QADUser -enabled -identity * -SizeLimit 0 | ForEach-Object {
      $Group = Get-QADMemberOf $SamAcc | where-object {$_.SamAccountName -like "SEC_*" } | Select-Object name
      
      # Objekt für die ausgabe erstellen
      $ResultObj = New-object -TypeName PSObject
      # Name des Users zu dem Objekt zufügen
      Add-Member -InputObject $ResultObj -Name 'Name' -Value $_.SamAccountName -MemberType NoteProperty
      # Name der Gruppe zu dem Objekt zufügen
      Add-Member -InputObject $ResultObj -Name 'Gruppe' -Value $Group -MemberType NoteProperty
      # Objekt in die Pipeline legen (ausgeben)
      $ResultObj
      
      } |  Export-Csv 'C:\temp\test.xls' -NoTypeInformation -Delimiter "`t" # Ausgabe in eine Exceldatei (Win 97 Format)


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    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' '

    Freitag, 7. September 2012 16:30
  • Danke für die Rückantwort, ein Teil des Scripts funkioniert.

    Ich bekomm folgendes Ergebnis

    Also bei Usern, die in mehreren Gruppen sind wird System.Object[] angezeigt.

    Montag, 10. September 2012 12:35
  • Ach du möchtest alle Gruppen in einer Spalte unterbringen !?
    Dann So:

    $OFS = ',' # Trennzeichen auf das Komma ändern
    
    Get-QADUser -enabled -identity * -SizeLimit 0 | Select-Object SamAccountName, @{Name='Gruppen'; Expression= {
        Get-QADMemberOf $_.SamAccountName | where-object {$_.SamAccountName -like "SEC_*"} |
          ForEach-Object {$_.Name} }} |
            Export-Csv 'C:\temp\test.xls' -NoTypeInformation -Delimiter "`t" # Ausgabe in eine Exceldatei (Win 97 Format)
    
    $OFS = ' ' # Trennzeichen zurücksetzen auf das Leerzeichen


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    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' '

    Montag, 10. September 2012 14:35
  • Nein, eigentlich möchte ich es so, das der User welcher in mehreren Gruppen ist, auch mehrfach angezeigt wird.

    Also User 3 ist in zwei Gruppen, somit soll er zweimal angezeigt werden, und jeweils mit einer der zwei Gruppen.

    eine Alternative wäre das die zweite Gruppe in der Spalte C angezeigt wird, bzw. die dritte Gruppe in Spalte D und soweiter,...

    Dienstag, 11. September 2012 06:36
  • Ist auch das einzig richtig brauchbare Format! Siehe diesen Thread (1:N Format bei Daten):
    http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/abfa7a05-5bde-4fae-9211-a87837268134

    Dalt halt so:

    Get-QADUser -enabled -identity * -SizeLimit 0 | ForEach-Object {
        $UserSamAcc = $_.SamAccountName # SamAccountName retten zur späteren Verwendung
        Get-QADMemberOf $UserSamAcc | where-object {$_.SamAccountName -like "SEC_*"} | 
          Select-Object @{Name='Name';Expression={$UserSamAcc}},@{Name='Gruppe';Expression={$_.SamAccountName}}   
    } |  Export-Csv 'C:\temp\test.xls' -NoTypeInformation -Delimiter "`t" # Ausgabe in eine Exceldatei (Win 97 Format)

    Lies dir dazu mal meine Blog Artikel durch:
    PowerShell eigene Objekte erstellen Custom Objects

    http://www.admin-source.de/BlogDeu/463/powershell-eigene-objekte-erstellen-custom-objects


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    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' '


    Dienstag, 11. September 2012 07:13
  • Das Script oben gibt schon fast mein gewünschtes Ergebnis aus, nur die User, die in keiner SEC_Gruppe sind werden nicht angezeigt.

    Also ist das nicht möglich diese auch mitanzuzeigen ?  Ich hab mir zwar deine Link angeschaut, aber das versteh ich bis jetzt noch nicht.

    Dienstag, 11. September 2012 08:12
  • Wenn man mit der PowerShell Arbeitet, sollte man sich mit Objekten etwas auskennen!
    http://www.it-visions.de/lserver/artikeldetails.aspx?b=4479
    http://www.nt4admins.de/themen/powershell/artikel/objektorientierung-in-der-powershell.html

    Da brauchst du natürlich ein IF:

    Get-QADUser -enabled -identity * -SizeLimit 0 | ForEach-Object {
        
        # Gruppen des Users mit suchfilter Auslesen
        $Gruppen = Get-QADMemberOf $_.SamAccountName -Name 'SEC_*' | Select-Object SamAccountName
        
        # Wenn $Gruppen.count grösser ist als 0 dann wurde(n) Gruppe(n) gefunden    
        If ($Gruppen.count -gt 0 ) { 
        # User hat eine oder mehrere gesuchte Gruppe(n) 
        
            # Alle gefundenen Gruppen mit Usernamen ausgeben
            Foreach ($Gruppe in $Gruppen) {
                # Objekt anlegen
                $Obj = New-Object -TypeName PSObject
                # User Namens Property anlegen
                Add-Member -InputObject $Obj -Name 'Name' -Value $_.SamAccountName -MemberType NoteProperty
                # Gruppen Property anlegen und mit dem Gruppennamen füllen
                Add-Member -InputObject $Obj -Name 'Gruppe' -Value $Gruppe.SamAccountName -MemberType NoteProperty
                # Objekt ausgeben
                $Obj        
            } 
        }
        Else { # User hat keine gesuchte Gruppe 
              
            # Objekt anlegen
            $Obj = New-Object -TypeName PSObject
            # User Namens Property anlegen
            Add-Member -InputObject $Obj -Name 'Name' -Value $_.SamAccountName -MemberType NoteProperty
            # leeres Gruppen Property anlegen
            Add-Member -InputObject $Obj -Name 'Gruppe' -Value '' -MemberType NoteProperty
            # Objekt ausgeben
            $Obj
        }
    } |  Export-Csv 'C:\temp\test.xls' -NoTypeInformation -Delimiter "`t" # Ausgabe in eine Exceldatei (Win 97 Format)


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    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' '


    • Bearbeitet Peter Kriegel Dienstag, 11. September 2012 09:42
    • Als Antwort markiert Andi-Willi Dienstag, 11. September 2012 14:26
    Dienstag, 11. September 2012 09:38
  • Hallo Peter

    Das Script funktioniert jetzt.

    Hab nur mehr die Zeile

    If ($Gruppen.count -gt 0 ) { 

    auf

    If (@($Gruppen).count -gt 0)  {

    durch den Befehl  If ($Gruppen.count -gt 0) wurden die User, die nur Mitglied von einer Gruppe sind, nicht ausgegeben.

    Dank für die Unterstützung

    Andi

    • Als Antwort markiert Andi-Willi Dienstag, 11. September 2012 14:26
    Dienstag, 11. September 2012 14:26