Jump to content

Powershell Script loop


Go to solution Solved by BOfH_666,

Recommended Posts

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!

Edited by Seppim
Link to post
  • Solution
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 to post

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 to post
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?

 

 

Edited by BOfH_666
  • Thanks 1
Link to post
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.

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...