firepower
Goto Top

Powershell Script um aus einer CSV Datei AD-User anzulegen, bzw. zu löschen

Hallo liebe Leute,

ich steh mal wieder auf dem Schlauch und komme nicht weiter.
Folgendes Problem:

Ich arbeite mit Powershell und soll im AD User anlegen bzw. löschen.

Kopf der CSV Datei:
auftrag,sAMAccountName,cn,FirstName,LastName,Password

Da drin stehen dann zB. folgende Zeilen:
anlegen,k.muster,Klaus Muster,Klaus,Muster,P@ssw0rd
anlegen,h.master,Heiko Master,Heiko,Master,P@ssw0rd
delete,john.woods,,,
delete,kim.ankers,,,

Folgendes hab ich schon realisiert:
$objOU=[ADSI]"LDAP://OU=FIRMA,DC=domain,DC=local"  

$dataSource=import-csv "liste.csv"  
foreach($dataRecord in $dataSource) {
	$auftrag=$dataRecord.auftrag

if ($auftrag="anlegen") {  
	#map variables to data source
	$sAMAccountName=$dataRecord.sAMAccountName
	$cn=$dataRecord.cn
	$givenName=$dataRecord.FirstName
	$sn=$dataRecord.LastName
	$displayName=$sn+", "+$givenName  
	$userPrincipalName=$givenName + "." + $sn + "@domain.local"  
	$password=$dataRecord.Password

    Write-Output "User angelegt:"  
    Write-Output $dataRecord
    Write-Output "------------------"  


	#create the user object
		$objUser=$objOU.Create("user","CN="+$cn)  
		$objUser.Put("sAMAccountName",$sAMAccountName)  
		$objUser.Put("userPrincipalName",$userPrincipalName)   
		$objUser.Put("displayName",$displayName)  
		$objUser.Put("givenName",$givenName)  
		$objUser.Put("sn",$sn)  
		$objUser.SetInfo()
		$objUser.SetPassword($password)
		$objUser.psbase.InvokeSet("AccountDisabled",$false)  
		$objUser.SetInfo()

}
if ($auftrag="delete") {  
              	$sAMAccountName=$dataRecord.sAMAccountName
		Write-Output "Deletet"  
                $ou.Delete(„user“,“cn=$sAMAccountName“)

}
}

Jeder Teil für sich arbeitet wunderbar, also wenn nur User zum anlegen sind, dann werden die angelegt.

Leider arbeitet das Script beide Scheifen unabhängig davon ab, was als Auftrag angegeben wurde.

Wie kann ich das regeln, dass auch wirklich nur die User angelegt werden, welche als Auftrag das "anlegen" haben
und bei den Usern die gelöscht werden sollen, dass die nicht mit Fehlermeldung, nicht angelegt werden, aber dann gelöscht werden. ?!?!

Kann mir da jemand weiterhelfen?

Viele Grüße und ein schönes Weekend
Firepower

Content-Key: 142433

Url: https://administrator.de/contentid/142433

Printed on: April 20, 2024 at 00:04 o'clock

Mitglied: 77559
77559 May 08, 2010 at 12:07:04 (UTC)
Goto Top
Hallo,

ersetze mal testhalber das Gleicheitszeichen in deinen If-Statements mit " -eq "
Oder nimm den hier IMO besser passenden Switch-Befehl.
Gruß
LotPings
Member: Firepower
Firepower May 08, 2010 at 14:12:47 (UTC)
Goto Top
Hallo,

vielen Dank für den richtigen "Tritt".
Manchmal sieht man den Wald vor lauter Bäumen nicht !

Hab es jetzt so geregelt:
$objOU=[ADSI]"LDAP://OU=FIRMA,DC=domain,DC=local"  

$dataSource=import-csv "liste.csv"  
foreach($dataRecord in $dataSource) {
	$auftrag=$dataRecord.auftrag

	switch ($auftrag){

		delete {
		$sAMAccountName=$dataRecord.sAMAccountName
		$ou.Delete("user","cn=$sAMAccountName")  
		Write-Output "Deletet"   
		Write-Output $dataRecord
		Write-Output "------------------"}  
	
		anlegen {
		#map variables to data source
		$cn=$dataRecord.cn
		$sAMAccountName=$dataRecord.sAMAccountName
		$givenName=$dataRecord.FirstName
		$sn=$dataRecord.LastName
		$displayName=$sn+", "+$givenName  
		$userPrincipalName=$givenName + "." + $sn + "@domain.local"  
		$password=$dataRecord.Password

		    Write-Output "User angelegt:"  
		    Write-Output $dataRecord
		    Write-Output "------------------"  


		#create the user object
			$objUser=$objOU.Create("user","CN="+$cn)  
			$objUser.Put("sAMAccountName",$sAMAccountName)  
			$objUser.Put("userPrincipalName",$userPrincipalName)   
			$objUser.Put("displayName",$displayName)  
			$objUser.Put("givenName",$givenName)  
			$objUser.Put("sn",$sn)  
			$objUser.SetInfo()
			$objUser.SetPassword($password)
			$objUser.psbase.InvokeSet("AccountDisabled",$false)  
			$objUser.SetInfo()

			}
	}
}

Das löschen funktioniert nun komischerweise nicht, aber da guck ich nochmal.
Erstmal vielen Dank !!

Schönes Wochenende noch.

Firepower


Edit fiel noch ein:

Hab es dann doch hinbekommen:
erst mit
import-module activedirectory

Die AD-Module nachinstalliert und dann mit
switch ($auftrag){

		delete {
			$sAMAccountName=$dataRecord.sAMAccountName
			Remove-ADUser $sAMAccountName -Confirm:$False

			Write-Output "Deletet"   
			Write-Output $dataRecord
			Write-Output "------------------"}  

darauf zugegriffen. Hat super geklappt.

Jetzt noch eine Abfrage ob der User auch existiert, ansonsten Meldung, dann bin ich fertig !


Danke nochmal
Firepower