gabebu
Goto Top

Powershell: Letzte Schritte

Hallo Zusammen

Dank euch ist das Script nun fast fertig und sieht so aus:
Import-Module ActiveDirectory; 
$Zaehler = 0 
$Import = @(Import-CSV C:\users\administrator\desktop\test.csv) 
$Reihenzaehler = $Import | Measure-Object; 
$Benutzername =  $Import[$Zaehler].sAMAccountName; 
$CompletePath = "CN=$Benutzername,OU=ZugelasseneMaschinen,OU=UEB,DC=ueb,DC=lokal";  

do
{
  
    $ADAbfrage = $ADAbfrage = get-aduser -Identity "CN=$Benutzername,OU=ZugelasseneMaschinen,OU=UEB,DC=ueb,DC=lokal" -ErrorAction SilentlyContinue   
    $Benutzername
    if ($Benutzername -ne $ADAbfrage )
    {
        csvde -i -k -f C:\users\Administrator\Desktop\test.csv   
        Set-AdAccountPassword -Identity $Benutzername -PassThru -Reset -Newpassword (ConvertTo-Securestring $Import[$Zaehler].sAMAccountName -Asplaintext -force) 
        $Zaehler = $Zaehler + 1;  
    }
    elseif ($Benutzername -eq  $ADAbfrage)
    {
        write-host "nix";  
    } 
    elseif ($Benutzername -eq $NULL)
    {
        write-host "bööb"  
        Remove-ADUser -Identity "CN=$Benutzername,OU=ZugelasseneMaschinen,OU=UEB,DC=ueb,DC=lokal" -Confirm:$false  
    }
    $Zaehler = $Zaehler + 1; 
    Clear-Variable ADAbfrage 
}while ($Reihenzaehler > $Zaehler  ) 

Jetzt gibt es nur noch eine kleine Sache und zwar folgendes:

Wenn ich einen Benutzer in der AD habe, der aber nicht in meiner CSV ist, soll er gelöscht werden. Also Beispielsweise ich habe in meiner OU die Benutzer:
hans
fritz
peter

Aber in meiner CSV ist nur
Hans
Peter

vorhanden. Das heisst, es soll dann Fritz löschen. Versucht habe ich dies mit dem 3 elseif($Benutzername -eq $NULL). Nur leider springt das Script, wenn ein Benutzer nicht vorhanden ist, immer in das zweite elseif ($Benutzername -eq $ADAbfrage).

Wie könnte ich dies nun noch umsetzen?

Danke für eure Antworten.

Gruss

Gabriel

Content-Key: 230922

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

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

Member: Rolf14
Rolf14 Feb 25, 2014 at 11:01:26 (UTC)
Goto Top
Hey du benutzt in deinem Skript das Programm CSVDE. Damit kannst du allerdings nur Objekte hinzufügen. Das Richte Programm wäre bei deinem Wunsch aber LDIFDE. Damit kannst du aus eine *.ldif Datei Objekte erstellen, ändern und löschen!

Du musst also ldifde statt csvde benutzen und deine *.csv in eine *.ldif um basteln.

Hier bekommst du dann weitere Informationen zu LDIFDE.
http://technet.microsoft.com/de-de/library/cc730865.aspx

LG
Member: gabeBU
gabeBU Feb 25, 2014 at 12:56:30 (UTC)
Goto Top
Das ist ein netter Tipp, aber ich weiss eher nicht, wie ich die Abfrage machen soll, deswegen wäre hier LDIFDE nicht unbedingt gefragt. Das löschen funktioniert für mich auch wunderbar mit Remove-ADUser.
Member: colinardo
Solution colinardo Feb 25, 2014 updated at 14:41:22 (UTC)
Goto Top
Hallo Gabriel,
zu dem Code sag ich nichts mehr, hatte dir beim letzten mal eine bessere Alternative vorgeschlagen, aber zurück zum Thema.
Das Löschen von Usern im AD die nicht in deiner CSV-Datei stehen lässt sich so in einem Schlag machen
$allADUsers = Get-ADUser -Filter * -SearchBase "OU=ZugelasseneMaschinen,OU=UEB,DC=ueb,DC=lokal" | select -ExpandProperty SamAccountName  
$allCSVUsers = Import-CSV "C:\users\administrator\desktop\test.csv" | select -ExpandProperty SamAccountName  
$allUsersNotInCSV = Compare-Object -ReferenceObject $allADUsers -DifferenceObject $allCSVUsers | ?{$_.SideIndicator -eq "<="} | select   
-ExpandProperty InputObject

foreach ($user in $allUsersNotInCSV){
   echo "Lösche Benutzer: $user ..."  
   Remove-ADUser -Identity "CN=$User,OU=ZugelasseneMaschinen,OU=UEB,DC=ueb,DC=lokal" -Confirm:$false   
}
Grüße Uwe
Member: gabeBU
gabeBU Feb 25, 2014 updated at 15:34:30 (UTC)
Goto Top
Yes! Danke. Jetzt muss ich nur noch schauen, dass er sonst den Benutzer erstellt.

Edit: SOoo! Alles fertig, Script funktioniert nun. Ich muss nur zusehen, dass immer ein Benutzer vorhanden ist (in der AD wie auch in der CSV). So sieht nun das Script aus:
Import-Module ActiveDirectory
do
{
$Zaehler = 0;
$Import = @(Import-CSV C:\users\administrator\desktop\MACAdresslist.csv) 
$Benutzername =  $Import[$Zaehler].sAMAccountName; 
$allADUsers = Get-ADUser -Filter * -SearchBase "OU=ZugelasseneMaschinen,OU=UEB,DC=ueb,DC=lokal" | select -ExpandProperty SamAccountName  
$allCSVUsers = $Import | select -ExpandProperty SamAccountName
$allUsersNotInCSV = Compare-Object -ReferenceObject $allADUsers -DifferenceObject $allCSVUsers | ?{$_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue  

foreach($Benutzername in $allUsersNotInCSV)
{
 csvde -i -k -f C:\users\Administrator\Desktop\MACAdresslist.csv   
 try
 {
    Set-AdAccountPassword -Identity $Benutzername -PassThru -Reset -Newpassword (ConvertTo-Securestring $Import[$Zaehler].sAMAccountName -Asplaintext -force)
 }
 catch
 {
 }
 finally
{
}
} 

foreach ($Benutzername in $allUsersNotInCSV)
{
   try
   {
   echo "Lösche Benutzer: $user ..."  
   Remove-ADUser -Identity "CN=$Benutzername,OU=ZugelasseneMaschinen,OU=UEB,DC=ueb,DC=lokal" -Confirm:$false   
   }
   catch
   {
   }
   finally
   {
   }
}
           
$Zaehler = $Zaehler + 1;
}while($Zaehler > $Reihenzaehler)