Jump to content

Powershell Script loop


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 von Seppim
Link zu diesem Kommentar
  • Beste Lösung
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.

Link zu diesem Kommentar

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 :-)

Link zu diesem Kommentar
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 von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...