Seppim 14 Geschrieben 13. September 2021 Melden Teilen Geschrieben 13. September 2021 (bearbeitet) Hallo, ich lade eine CSV und lege User im AD an. Nun möchte ich alle user deaktivieren, die im Office Attribute vom csv gelistet sind. # Import active directory module for running AD cmdlets Import-Module activedirectory #Store the data from ADUsers.csv in the $ADUsers variable $ADUsers = Import-csv -Delimiter ";" user.csv # Deactivate alle users $Users = $null $users = Get-ADUser -F {Office -eq "group1" -or Office -eq "group2" -or Office -eq "group3"} ForEach($user in $users) { Write-Host -ForegroundColor Yellow "Deactivate user: " $user Disable-ADAccount $user } #Loop through each row containing user details in the CSV file foreach ($User in $ADUsers) { #Read user data from each field in each row and assign the data to a variable as below $UserPrincipalName = $User.UserPrincipalName $UserName = $UserPrincipalName.Split('@')[0] $SamAccountName = $User.SamAccountName $Password = $User.Passwort $Firstname = $User.Vorname $Lastname = $User.Nachname $OU = $User.ou $Office = $User.Office $loginScript = $User.AnmeldeSkript ich müsste nun den Teil: $users = Get-ADUser -F {Office -eq "group1" -or Office -eq "group2" -or Office -eq "group3"} gegen ein Array der Spalte "Office" im CSV austauchen. Die Spalte "Office" im CSV hat group1, group1, group2, ... usw. Fein wäre wenn er die doppelten gleich ignoriert. Kann mir da jemand helfen? Danke! bearbeitet 13. September 2021 von Seppim Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 13. September 2021 Beste Lösung Melden Teilen Geschrieben 13. September 2021 vor 32 Minuten schrieb Seppim: Kann mir da jemand helfen? hmmm ... Dein Code is syntaktisch falsch oder unvollständig ... ich hoffe mal, dass das nur beim hierher Kopieren passiert ist. # Import active directory module for running AD cmdlets Import-Module activedirectory Das ist überflüssig. Seit PowerShell Version 3 werden korrekt installierte Module automatisch geladen. Das Einzige, was vielleicht Sinn machen würde wäre... #Requires -Modules ActiveDirectory ... $users = Get-ADUser -F {Office -eq "group1" -or Office -eq "group2" -or Office -eq "group3"} Vermutlich wird mich gleich wieder jemand korrigieren und sagen, dass das mit LDAP-Filter überhaupt kein Problem ist, aber meiner Meinung nach ist es bei komplexen Bedingungen häufig einfacher, die Filterung mit einem Where-Object zu erledigen. Du könntest also hiermit $users = Get-ADUser -SearchBase 'whatever fits to your environment' | Where-Object { $_.Office -in $ADUsers.Office} ... die gewünschten AD-Konten ermitteln. Zitieren Link zu diesem Kommentar
Seppim 14 Geschrieben 13. September 2021 Autor Melden Teilen Geschrieben 13. September 2021 hmmm ... das scheint zu klappen, oder ist hier noch ein Fehler?: # Import active directory module for running AD cmdlets Import-Module activedirectory #Store the data from ADUsers.csv in the $ADUsers variable $ADUsers = Import-csv -Delimiter ";" test.csv $ListOfOffices = New-Object -TypeName "System.Collections.ArrayList" $ListOfOffices = [System.Collections.ArrayList]@() foreach ($Users in $ADUsers) { if(-not ($ListOfOffices -contains $Users.Office)) { $ListOfOffices.Add($Users.Office) } } $ListOfOffices # Deactivate alle users $users = $null $ADPeopleActive = Get-ADUser -Properties Office -Filter {Enabled -Eq $True} $users = $ADPeopleActive| Where-Object { $ListOfOffices -contains $_.Office } ForEach($user in $users) { Write-Host "Disable user: " $user Disable-ADAccount $user } vor 8 Minuten schrieb BOfH_666: hmmm ... Dein Code is syntaktisch falsch oder unvollständig ... ich hoffe mal, dass das nur beim hierher Kopieren passiert ist. # Import active directory module for running AD cmdlets Import-Module activedirectory Das ist überflüssig. Seit PowerShell Version 3 werden korrekt installierte Module automatisch geladen. Das Einzige, was vielleicht Sinn machen würde wäre... #Requires -Modules ActiveDirectory ... $users = Get-ADUser -F {Office -eq "group1" -or Office -eq "group2" -or Office -eq "group3"} Vermutlich wird mich gleich wieder jemand korrigieren und sagen, dass das mit LDAP-Filter überhaupt kein Problem ist, aber meiner Meinung nach ist es bei komplexen Bedingungen häufig einfacher, die Filterung mit einem Where-Object zu erledigen. Du könntest also hiermit $users = Get-ADUser -SearchBase 'whatever fits to your environment' | Where-Object { $_.Office -in $ADUsers.Office} ... die gewünschten AD-Konten ermitteln. Vielen Dank! Werd ist meiner zweiten Version ähnlich und baue meinen Code um. Aber ich habe noch im Sammeln der Offices ein Problem: foreach ($Users in $ADUsers) { if(-not ($ListOfOffices -contains $Users.Office)) { $ListOfOffices.Add($Users.Office) } } ergibt: 0 1 2 3 4 5 6 7 group1 group2 group3 group4 group5 group6 group7 group8 Woher kommen die Zahlen 0-7? Sind das NULL Werte die als index hochzählt? $ListOfOffices = [System.Collections.ArrayList]::new() foreach ($Users in $ADUsers) { if(-not ($ListOfOffices -contains $Users.Office)) { [void]$ListOfOffices.Add($Users.Office) } } $ListOfOffices so scheint es nun zu passen Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. September 2021 Melden Teilen Geschrieben 13. September 2021 (bearbeitet) vor einer Stunde schrieb Seppim: Werd ist meiner zweiten Version ähnlich und baue meinen Code um. Ich weiß, wir sind hier in einem Forum und nicht im Deutschunterricht, aber wenn Deine Sätze dann keinen erkennbaren Sinn mehr ergeben, wird es auch schwer Dir zu helfen. Also achte doch wenigstens ein wenig auf vernünftiges und verständliches Deutsch! Und es ist auch nicht nötig, jedes mal die komplette Nachricht zu zitieren. Besonders, wenn Du Dich gar nicht auf eine spezifische Passage beziehst. vor einer Stunde schrieb Seppim: so scheint es nun zu passen Heißt das, dass das Problem gelöst ist? bearbeitet 13. September 2021 von BOfH_666 1 Zitieren Link zu diesem Kommentar
Seppim 14 Geschrieben 13. September 2021 Autor Melden Teilen Geschrieben 13. September 2021 Hallo, ups, sorry. Da hat sich ein "werd" am Beginn des Satzes eingeschlichen Ja, Frage ist beantwortet. Danke! Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 13. September 2021 Melden Teilen Geschrieben 13. September 2021 vor 8 Stunden schrieb Seppim: $ListOfOffices.Add($Users.Office) Aufrufe von Methoden liefern gern mal Returns. Bei ArrayLists die neue Anzahl der Elemente im Array. Ein "$null = " oder "[void]" davor unterdrückt das. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.