none
Import von usern aus csv - check ob in Ou vorhanden - Ergebniss in csv schreiben

    Frage

  • Hallo zusammen,

    Ich versuche im Moment ein Skript zu erstellen, welches Prüft, ob User aus einer bestimmten .csv Datei in einer bestimtmen OU für ausgeschiedene Mitarbeiter sind (im Skrip anonymisiert).

    Das Skript soll dann - je nach Ergebniss - den UserPrincipalName + "ist ausgeschieden" oder eben "ist nicht ausgeschieden" in einer CSV Datei ausgeben.

    Hier das Skript, welches ich als zugebener PowerShell Newbie zusammengebastelt habe:

    Import-Module ActiveDirectory
    
    #Import-CSV
    $csv = Import-CSV C:\Skype\CsUserExport.csv -Delimiter ";"
    
    # Loop each user in csv and check if they are in OU or not
    ForEach ($user in $csv) {
    $UPN = $user.UserPrincipalName
    $Check = Get-ADUser -Filter {UserPrincipalName -eq $UPN} -SearchBase "OU=targetOU,OU=OU,DC=DC,DC=net"
    If ($Check -eq $true) {$ausgeschieden = $user.UserPrincipalName + " ist ausgeschieden"} 
    Else {$ausgeschieden = $user.UserPrincipalName + " ist nicht ausgeschieden"}
    
    }
    
    
    # Create csv File with results
    $ausgeschieden | Out-File "C:\Skype\ausgeschiedene_user.csv"
    

    Das Skript läuft auch ohne Fehler durch, allerdings wird nur der zuletzt geprüfte User in der CSV Datei ausgegeben. Ich denke das rührt daher, dass die Variable $ausgeschieden bei jedem Durchlauf des Loops neu überschrieben wird und dann eben auch nur der letze Wert n die CSV Datei egschrieben wird. Ich fidne aber einfach keien Lösung wie ich das umgehen kann... Ich verzweifle so langsam und wäre für jeden Tipp sehr dankbar!

    Mit freundlichen Grüßen,

    Sebastian

    Mittwoch, 10. April 2019 15:26

Antworten

  • Moin,

    Du denkst richtig. Erklär einfach $ausgeschieden zum Array...

    $ausgeschieden = @()

    und mach dann in der Schleife 

    $ausgeschieden += "$($user.UserPrincipalName) ist ausgeschieden"

    bzw.

    $ausgeschieden += "$($user.UserPrincipalName) ist nicht ausgeschieden"


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Mittwoch, 10. April 2019 15:36

Alle Antworten

  • Moin,

    Du denkst richtig. Erklär einfach $ausgeschieden zum Array...

    $ausgeschieden = @()

    und mach dann in der Schleife 

    $ausgeschieden += "$($user.UserPrincipalName) ist ausgeschieden"

    bzw.

    $ausgeschieden += "$($user.UserPrincipalName) ist nicht ausgeschieden"


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Mittwoch, 10. April 2019 15:36
  • Hi,

    Danke für die Rückmeldung - habe gestern abend nochmal gebastelt und es gelöst bekommen - allerdings nicht auf deinem Weg. Hier mein Skript:

    Import-Module ActiveDirectory
    
    #Import-CSV
    $csv = Import-CSV C:\Skype\CsUserExport.csv -Delimiter ";"
    
    
    ForEach ($user in $csv) {
        $UPN = $user.UserPrincipalName
        $Check = Get-ADUser -Filter {UserPrincipalName -eq $UPN} -SearchBase "OU=ausgeschiede_ma,OU=keller-group,DC=keller-group,DC=net"
        If ($Check -ne $null) {$ausgeschieden = $user.UserPrincipalName + ",ist ausgeschieden"} 
        Else {$ausgeschieden = $user.UserPrincipalName + ",ist nicht ausgeschieden"}
    
        # Add to csv File with results
        $ausgeschieden | Out-File "C:\Skype\ausgeschiedene_user.csv" -Append
    
    }#end ForEach($user in $csv)
    

    Ist dein Weg mehr "BestPractice"? bzw. gibt es Nachteile in meienr Lösung gegenüber deiner?

    Bin momentan im Lernprozess für PowerShell und wäre über jeden Tipp dankbar!

    Donnerstag, 11. April 2019 08:49
  • bzw. gibt es Nachteile in meienr Lösung gegenüber deiner? 


    Ja. Die Datei wird bei jedem Schleifendurchlauf neu gesucht, aufgemacht und wieder zugemacht. Bei 5 oder auch 50 Zeilen wird man keinen Unterschied merken, bei 50.000 schon ;-)

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Donnerstag, 11. April 2019 08:52