gabebu
Goto Top

Powershell: Script funktioniert nach Einteilung in Funktionen nicht mehr richtig...

Hallo Zusammen

Ich habe ja in letzter Zeit häufiger was wegen Powershell gepostet. Grundsätzlich funktioniert das Script, nur wollte ich jetzt noch alles in Funktionen zusammenfassen, damit ich eine bessere Übersicht habe um dann das Script zu erklären usw...nur leider werden wie es scheint gewisse globale Variabeln nicht so weitergegeben wie gewollt, denn das löschen der Benutzer (DeleteUser) und das erstellen der Log-Datei funktioniert nicht mehr richtig (CreateLog). Ich vermute, dass die Variabeln nicht mehr richtig erkannt werden und deshalb die Funktion nicht richtig ausgegeben wird.

Es ist hier nicht gerade übersichtlich, deswegen habe ich noch die eigentliche PS-1-Datei auf Dropbox freigegeben, dann könnt ihr es schön formatiert im Editor ansehen:
https://www.dropbox.com/s/bsb69u8evv425ny/MAC_Benutzerverwaltung1.1.ps1

Es ist ein ziemlich grosses Script, aber ich habe es versucht möglichst gut zu formatieren:

<#***********************************************************************************************************************************************************************************************************************************
*Titel: MAC Benutzerverwaltung
*Ersteller: Gabriel Buehler
*Erstellungsdatum: 26.02.2014
*Bearbeitungsdatum:
*Beschreibung: Mit diesem Script ist es möglich, alle MAC-Adressbenutzer zu verwalten und auch gleich automatisch zu löschen.
*Version: 1.1
***********************************************************************************************************************************************************************************************************************************#>
#Importierung des Moduls für das Arbeiten mit Active Directory
Import-Module ActiveDirectory
#Gruppenrichtlinie Updaten
#gpupdate /force
#******************************Funktion: Hauptmenü***************************************************************************************************************************************************************************************
#
 function Menue
{
    Write-host "*******************HAUPTMENÜ******************************";  
    Write-host "Willkommen zur MAC Benutzerverwltung.                    *";  
    write-host "*1. Benutzer aus der CSV erstellen                       *";  
    write-host "*2. Erklaerung des Ablaufes                              *";  
    write-host "*3. Programm beenden                                     *";  
    write-host "**********************************************************";  
    $global:Eingabe = read-host "Eingabe";  
}
function Variabeln
{
      
    #******************************Importierung***********************************************************************************************************************************************************************************
    #Importierung der CSV-Datei
    $global:Import = @(Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv)  
    #******************************Importierung***********************************************************************************************************************************************************************************
    #******************************Pfad*******************************************************************************************************************************************************************************************
    #HIER EINZIGE ÄNDERUNG VORNEHMEN Stammpfad der uebergeordneten Organisationseinheiten 
    $global:OUPath = "OU=Machines,OU=IPA,DC=IPA,DC=LOKAL";  
    #*****************************************************************************************************************************************************************************************************************************
    #*********************************Benutzername********************************************************************************************************************************************************************************
    #Zaehler fuer das Abfragen jeder Reihe
    $global:Zaehler = 0;
    #Reihenzaehler fuer das Zaehlen der Reihen
    $global:Reihenzaehler = Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv | Measure-Object
    $global:Reihenzaehler.Count
    #Benutzername fuer die Passwortzuweisung
    #Jede Zeile mit der Zahl Zaehler (Zahl, die in einer DO-While-Schleife hochgezaehlt wird) den Wert "SamAccontName" (Kontoname)  
    $global:Benutzername = $global:Import[$global:Zaehler].SamAccountName
    #*********************************************************************************************************************************************************************************************************************************
    #******************************1. Teil Vergleichsvariabeln************************************************************************************************************************************************************************
    #Alle ADUser auswerfen für den direkten Vergleich mit der CSV-Datei
    $global:allADUsers = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty SamAccountName
    #Der Anzeigename (fuer die Log-Dateien)
    $global:allAdusersgiven = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty GivenName
    #Alle Benutzer der CSV-Datei
    #Der Anzeigename der Nutzer, die in der CSV eingetragen sind
    $global:allCSVUsersgiven = $global:Import | select -ExpandProperty GivenName
    #*********************************************************************************************************************************************************************************************************************************
    #******************************Importierung***************************************************************************************************************************************************************************************
    #Importierung der CSV-Datei
    $global:Import = @(Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv)  
    #******************************Importierung***************************************************************************************************************************************************************************************
    #******************************Pfad***********************************************************************************************************************************************************************************************
    #HIER EINZIGE ÄNDERUNG VORNEHMEN Stammpfad der uebergeordneten Organisationseinheiten 
    $global:OUPath = "OU=Machines,OU=IPA,DC=IPA,DC=LOKAL";  
    #*********************************************************************************************************************************************************************************************************************************
    #*********************************Benutzername************************************************************************************************************************************************************************************
    #Zaehler fuer das Abfragen jeder Reihe
    $global:Zaehler = 0;
    #Reihenzaehler fuer das Zaehlen der Reihen
    $global:Reihenzaehler = Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv | Measure-Object
    $global:Reihenzaehler.Count
    #Benutzername fuer die Passwortzuweisung
    #Jede Zeile mit der Zahl Zaehler (Zahl, die in einer DO-While-Schleife hochgezaehlt wird) den Wert "SamAccontName" (Kontoname)  
    $global:Benutzername = $global:Import[$global:Zaehler].SamAccountName
    #*********************************************************************************************************************************************************************************************************************************
    #******************************1. Teil Vergleichsvariabeln************************************************************************************************************************************************************************
    #Alle ADUser auswerfen für den direkten Vergleich mit der CSV-Datei
    $global:allADUsers = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty SamAccountName
    #Der Anzeigename (fuer die Log-Dateien)
    $global:allAdusersgiven = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty GivenName
    #Alle Benutzer der CSV-Datei
    $global:allCSVUsers = $global:Import | select -ExpandProperty SamAccountName
    #Der Anzeigename der Nutzer, die in der CSV eingetragen sind
    $global:allCSVUsersgiven = $global:Import | select -ExpandProperty GivenName
    #*********************************************************************************************************************************************************************************************************************************
    #******************************2. Teil Vergleichsvariabel zwischen AD und CSV*****************************************************************************************************************************************************
    #Try-Funktion, damit kein Fehler ausgegeben wird (falls sich kein Benutzer in der Active Directory oder im CSV befinden sollte). 
    #try
    #{
        #Vergleich zwischen der CSV und der AD, damit später alle Benutzer gelöscht werden, die sich nicht in der AD befinden.
        #Compare-Object Vergleich
        #Referenz: Alle Benutzer in der CSV
        #Differenz: Alle Benutzer die in der CSV sind
        #?{$global:_.SideIndicator -eq "<="} : Speichere diese Nutzer in der Variabel, die zwar in der ersten Variabel enthalten sind, aber NICHT in der zweiten  
        #select  -ExpandProperty InputObject: Wähle das Input-Object (also das Objekt, dass in die Pipeline für das Auswaehlen gebracht wurde, hier die Variable allusernotincsv
        #Erroraction Silently-Continue: Keine Fehlermeldung ausgeben
        #*****************************************************************************************************************************************************************************************************************************
        #AllusersnotinCSV der sAMAccountname entspricht der MAC-Adresse (der Kontonname). Dieser Vergleich wird fuer das eigentliche loeschen Verwendet.
        $global:allUsersNotInCSV = Compare-Object -ReferenceObject $global:allADUsers -DifferenceObject $global:allCSVUsers | ?{$global:_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue  
        #AllusersnotinCSVgiven mit dem givenName wird fuer die Ausgabe der Anzeigename verwendet damit man weiss, welche Maschinen gelöscht werden.
        $global:allUsersNotInCSVgiven = Compare-Object -ReferenceObject $global:allADUsersgiven -DifferenceObject $global:allCSVUsersgiven | ?{$global:_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue  
   # }
    #Catch Abfangen und Ausgabe der Fehlermeldung (falls gewünscht)
    #catch
    #{
    #}
   # finally
    #{
    #}
}
#*****************************************************************************************************************************************************************************************************************************************************
function CreateUser
{ 
    #******************************Benutzer wird erstellt*********************************************************************************************************************************************************************************************          
    #-i: Importmodus, Benutzer wird Importiert und nicht exportiert, deswegen muss der -i Parameter angegeben werden
    #-k: Keine Fehlermeldung angeben
    #-f: Dateiname der zu Importierenden Datei (hier: MACAdresslist.csv)
    #-j: Log-Datei erstellen.
    ##******************************Benutzer wird erstellt********************************************************************************************************************************************************************************************
    #Benutzer wird aus der CSV  erstellt, mit 
    csvde -i -k -f \\IPASRV01\Transfer\MACAdresslist.csv -j C:\
    #Erstelle eine Log-Datei und exportiere sie in eine CSV, damit sie später weiterverarbeitet werden kann.
    $global:importcsvdelog = import-csv C:\csv.log | export-csv \\IPASRV01\Transfer\logs\csvde.csv
    #Importiere direkt die exportierte CSV.
    $global:importcsvde = import-csv \\IPASRV01\transfer\logs\csvde.csv
}
#******************************************************************************************************************************************************************************************************************************************************
function Createlog
{
  #*******************************************Log-Dateien schreiben ************************************************************************************************************************************************************     
    $global:log = @()
    #foreach($global:line in $global:importcsvde)
    #{
     #   $global:log += New-Object PSObject -Property @{Titel="Neue User";Wert=$global:line}  
    #}
    $global:log += New-Object PSObject -Property @{Titel = "Geloeschte User `n"; Wert = "$global:allusersnotincsvgiven"}  
    $global:log += New-Object PSObject -Property @{Titel = "MAC-Adresse `n"; Wert = "$global:allusersnotincsv"}  
    $global:log | select Titel,Wert | export-csv -Path "\\IPASRV01\Transfer\logs\MACLog.csv" -NoTypeInformation -Delimiter ";"    
 
}
#***************************************************************************************************************************************************************************************************************************************************
function CreatePassword
{        
    #If-Abfrage, falls die CSV-Datei leer sein sollte.
    if ($global:Reihenzaehler.count -ne 0)
    {
        #Do-While-Schleife fuer das Abzaehlen der Reihen und der Zuweisung des Passwortes
        do
        {
            write-host "bisch sogar id schleife vom PW cho^^";  
            #Passwort setzen. Identity ist der Benutzername, das Passwort ist auch der Benutzername (MAC-Adresse).
            try
            {
                Set-AdAccountPassword -Identity $global:Benutzername -PassThru -Reset -Newpassword (ConvertTo-Securestring $global:Benutzername -Asplaintext -force)
            }
            catch
            {
            }
            #Weiterführung des Scriptes
            finally
            {
            }
            #Zaehler wird erhöht um 1
            $global:Zaehler = $global:Zaehler + 1
            #Führe die Schleife solange aus, bis alle Reihen durch sind.
        }while($global:Zaehler -ne $global:Reihenzaehler.Count)
     }
}
#****************************************************************************************************************************************************************************************************************************************************
function DeleteUser
{             
 #********************Benutzer werden gelöscht die sich nicht in der CSV-Datei befinden.*****************************************************************************************************************************************************************************************          
    #Alle Benutzer, die sich nicht in der CSV befinden, aber in der Active Directory vorhanden sind.
    foreach ($line in $global:allUsersNotInCSV)
    {             
        #Try-Funktion, damit kein Fehler ausgegeben wird.   
        try
        {
            write-host "hoi";  
            echo "Lösche Benutzer: $global:line ..."   
            Remove-ADUser -Identity $global:line -Confirm:$global:false 
        }
        #Catch Abfangen und Ausgabe der Fehlermeldung (falls gewünscht) 
        catch
        {
        }
        #Weiterführung des Scriptes 
        finally
        {
        }
            
    }
           
}
           
#Do-while Schleife die solange ausgeführt wird, eine 3 eingegeben wird.
Do
{
    #Führe die Funktion "Menue" aus  
    Menue;
    
    if ($global:Eingabe -eq 1)
    {
        #Fuehre die Funktion Variables aus
        variabeln;
        #Führe die Funtkion "create user" aus  
       #CreateUser;
        #Führe die Funktion "create log" aus  
        CreateLog;
        #Führe die Funktion "create Password" aus  
        CreatePassword;
        #Führe die Funktion "Delete User" aus  
        DeleteUser; 
        
     }        
#********************************************************************************************************************************************************************************************************************************
    if($global:Eingabe -eq 2)
    {
    write-host "*******************Ablauf**********************************************************************************************";  
    write-host "*Die MAC Benutzerverwaltung erstellt mit Hilfe von einer CSV-Datei Benutzer und löscht gleich auch automatisch diese, *";   
    write-host "*die nicht in der Liste eingetragen sind / bzw. sich auch in der Active Directory befinden.                           *";                              
    write-host "*Beachten Sie die Kommentare im Script fuer weitere Informationen. Bei Fragen wenden Sie sich an Gabriel Bühler       *";  
    write-host "***********************************************************************************************************************";  
    }
#Fuehre die Schleife solange aus, bis das Programm mit der Eingabe 3 beendet werden soll.
}while($global:Eingabe -ne 3)

(die *-Zeichen waren in schönen reihen, als ich es im Editor erstellt habe *hust*^^)


Vielleicht seht ihr ja, wo genau der Fehler liegt.

Besten Dank für das Überprüfen.

Gruss

gabeBU

Content-Key: 233175

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

Printed on: April 19, 2024 at 17:04 o'clock

Member: colinardo
Solution colinardo Mar 20, 2014 updated at 14:35:22 (UTC)
Goto Top
Hallo gabe,
du mischst hier globale und lokale Variablen. Einer der Fehler in DeleteUser:
Remove-ADUser -Identity $global:line -Confirm:$global:false  
$line ist eine lokale Variable der Schleife und bekommt deshalb kein $global. Und was soll das $global:false ? hier reicht ein einfaches $false.

Also wirklich nur die Variablen global definieren die du wirklich außerhalb einer Funktion weiter benötigst. Einfach vor alles $global zu setzen bringt nur Fehler.

Hier hilft nur Schritt für Schritt noch mal alles durchzugehen.

Grüße Uwe
Member: gabeBU
gabeBU Mar 20, 2014 at 10:23:21 (UTC)
Goto Top
Yep, da habe ich ein paar Globale zu viel gesetzt...ich bin gerade wie wild am suchen, ausser dem Log setzen funktioniert nun auch alles wieder, nur wird dort nach dem CSVDE-Eintrag keine weiteren Werte mehr eingesetzt....
Member: gabeBU
gabeBU Mar 20, 2014 at 13:18:21 (UTC)
Goto Top
SOoo:

Also, das erstellen der Log-Files funktioniert aufgrund der globalen-Variabeln nicht richtig, irgendwie wird da etwas nicht richtig weitergegeben, deswegen habe ich es aus der Funktionen und mit den Variabeln ( die auch in der Funktion nicht mehr richtig weitergegeben werden) oben in das Script gepackt, dann funktioniert auch alles sauber. Hier ist das FINALE Script (wenn ihr möchtet, könnt ihr noch weiter rumprobieren, falls ihr es hinkriegt die Variabeln in einer Funktion weiterzugeben und auch die Logfile-Erstellung in einer Funktion zu speichern) (hier noch auch der LInk über Dropbox): https://www.dropbox.com/s/3uxqxejy1iru6vp/MAC_Benutzerverwaltung1.5.ps1.
<#***********************************************************************************************************************************************************************************************************************************
*Titel: MAC Benutzerverwaltung
*Ersteller: Gabriel Buehler
*Erstellungsdatum: 26.02.2014
*Bearbeitungsdatum:
*Beschreibung: Mit diesem Script ist es möglich, alle MAC-Adressbenutzer zu verwalten und auch gleich automatisch zu löschen.
*Version: 1.5 
*Beschreibung: IPA-Final
***********************************************************************************************************************************************************************************************************************************#>
#Importierung des Moduls für das Arbeiten mit Active Directory
Import-Module ActiveDirectory
#Gruppenrichtlinie Updaten
#gpupdate /force
#****************************************************************Variabeln********************************************************************************************************************************************************* 
    #******************************Importierung***********************************************************************************************************************************************************************************
    #Importierung der CSV-Datei
    $global:Import = @(Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv)  
    #******************************Importierung***********************************************************************************************************************************************************************************
    #******************************Pfad*******************************************************************************************************************************************************************************************
    #HIER EINZIGE ÄNDERUNG VORNEHMEN Stammpfad der uebergeordneten Organisationseinheiten 
    $global:OUPath = "OU=Machines,OU=IPA,DC=IPA,DC=LOKAL";  
    #******************************1. Teil Vergleichsvariabeln************************************************************************************************************************************************************************
    #Alle ADUser auswerfen für den direkten Vergleich mit der CSV-Datei
    $global:allADUsers = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty SamAccountName
    #Der Anzeigename (fuer die Log-Dateien)
    $global:allAdusersgiven = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty GivenName
    #Alle Benutzer der CSV-Datei.
    $global:allCSVUsers = $global:Import | select -ExpandProperty sAMAccountName
    #Der Anzeigename der Nutzer, die in der CSV eingetragen sind
    $global:allCSVUsersgiven = $global:Import | select -ExpandProperty GivenName
#****************************************************************Log-Files*********************************************************************************************************************************************************

  <#*******************************************Log-Dateien schreiben ************************************************************************************************************************************************************ 
    # Aus jeder Zeile die später in der CSV-Datei erscheinen soll, wird ein Powershell-Objekt  
    generiert das seinerseits eine Hashtable mit den Spaltennamen und Werten enthält. 
    Diese Objekte fügen wir dann an ein Array an, welches zum Schluss an export-csv übergeben wird. 
    Das zwischengeschaltete select stellt sicher das die Reihenfolge der Spalten in der CSV-Datei wieder stimmt. Die erste Foreach-Schlaufe ist fuer den
    CSVDE-Log. Da dieser aus einer anderen CSVDE-Datei importiert wird, muss jede Zeile einzeln mit einer Schlaufe eingelesen werden.
  #> 
    
     $log = @();
    foreach($line in $global:importcsvde)
    {
        $log += New-Object PSObject -Property @{Titel="Neue User";Wert=$line}  
    }
    $log += New-Object PSObject -Property @{Titel = "Geloeschte User `n"; Wert = $global:allUsersNotInCSVgiven}  
    $log += New-Object PSObject -Property @{Titel = "MAC-Adresse `n"; Wert = $global:allUsersNotInCSV}  
    $log | select Titel,Wert | export-csv -Path "\\IPASRV01\Transfer\logs\MACLog.csv" -NoTypeInformation -Delimiter ";"    
#*********************************************************************************************************************************************************************************************************************************
#Funktion Variabeln: werden nicht mehr richtig weitergegeben, deswegen sind sie nicht mehr in einer FUnktion gespeichert. Kann zu übungszwecken versucht werden.
function variabeln
{
}
#******************************Funktion: Hauptmenü***************************************************************************************************************************************************************************************
#
 function Menue
{
    Write-host "*******************HAUPTMENÜ******************************";  
    Write-host "Willkommen zur MAC Benutzerverwltung.                    *";  
    write-host "*1. Benutzer aus der CSV erstellen                       *";  
    write-host "*2. Erklaerung des Ablaufes                              *";  
    write-host "*3. Programm beenden                                     *";  
    write-host "**********************************************************";  
    $global:Eingabe = read-host "Eingabe";  
}

    #******************************2. Teil Vergleichsvariabel zwischen AD und CSV*****************************************************************************************************************************************************
    #Try-Funktion, damit kein Fehler ausgegeben wird (falls sich kein Benutzer in der Active Directory oder im CSV befinden sollte). 
    try
    {
        #Vergleich zwischen der CSV und der AD, damit später alle Benutzer gelöscht werden, die sich nicht in der AD befinden.
        #Compare-Object Vergleich
        #Referenz: Alle Benutzer in der CSV
        #Differenz: Alle Benutzer die in der CSV sind
        #?{$global:_.SideIndicator -eq "<="} : Speichere diese Nutzer in der Variabel, die zwar in der ersten Variabel enthalten sind, aber NICHT in der zweiten  
        #select  -ExpandProperty InputObject: Wähle das Input-Object (also das Objekt, dass in die Pipeline für das Auswaehlen gebracht wurde, hier die Variable allusernotincsv
        #Erroraction Silently-Continue: Keine Fehlermeldung ausgeben
        #*****************************************************************************************************************************************************************************************************************************
        #AllusersnotinCSV der sAMAccountname entspricht der MAC-Adresse (der Kontonname). Dieser Vergleich wird fuer das eigentliche loeschen Verwendet.
        $global:allUsersNotInCSV = Compare-Object -ReferenceObject $global:allADUsers -DifferenceObject $global:allCSVUsers | ?{$global:_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue  
        #AllusersnotinCSVgiven mit dem givenName wird fuer die Ausgabe der Anzeigename verwendet damit man weiss, welche Maschinen gelöscht werden.
        $global:allUsersNotInCSVgiven = Compare-Object -ReferenceObject $global:allADUsersgiven -DifferenceObject $global:allCSVUsersgiven | ?{$global:_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue  
        $global:allUsersNotInCSV
        $global:allUsersNotInCSVgiven
    }
    #Catch Abfangen und Ausgabe der Fehlermeldung (falls gewünscht)
    catch
    {
    }
     finally
    {
    }

#*****************************************************************************************************************************************************************************************************************************************************
function CreateUser
{ 
    #******************************Benutzer wird erstellt*********************************************************************************************************************************************************************************************          
    #-i: Importmodus, Benutzer wird Importiert und nicht exportiert, deswegen muss der -i Parameter angegeben werden
    #-k: Keine Fehlermeldung angeben
    #-f: Dateiname der zu Importierenden Datei (hier: MACAdresslist.csv)
    #-j: Log-Datei erstellen.
    ##******************************Benutzer wird erstellt********************************************************************************************************************************************************************************************
    #Benutzer wird aus der CSV  erstellt, mit 
    csvde -i -k -f \\IPASRV01\Transfer\MACAdresslist.csv -j C:\
    #Erstelle eine Log-Datei und exportiere sie in eine CSV, damit sie später weiterverarbeitet werden kann.
    $global:importcsvdelog = import-csv C:\csv.log | export-csv \\IPASRV01\Transfer\logs\csvde.csv
    #Importiere direkt die exportierte CSV.
    $global:importcsvde = import-csv \\IPASRV01\transfer\logs\csvde.csv
}
#******************************************************************************************************************************************************************************************************************************************************
#Funktion Create log. Auch hier werden die Variabeln nicht richtig weitergegeben, deswegen bleiben sie im eigentlichen Script. Kann zu übungszwecken versucht werden.*********************************************************************************
function Createlog
{
    
}
#***************************************************************************************************************************************************************************************************************************************************
function CreatePassword
{        
    #If-Abfrage, falls die CSV-Datei leer sein sollte.
    if ($global:Reihenzaehler.count -ne 0)
    {
        #Führe die Schleife solange aus, bis alle Reihen der Import-Datei durch sind.
        foreach ($line in $Global:Import)
        {
            write-host "bisch sogar id schleife vom PW cho^^";  
            #Passwort setzen. Identity ist der Benutzername, das Passwort ist auch der Benutzername (MAC-Adresse).
           # try
            #{
                Set-AdAccountPassword -Identity $line.SamAccountName -PassThru -Reset -Newpassword (ConvertTo-Securestring $line.SamAccountName -Asplaintext -force)
            #}
            #catch
            #{
            #}
            #Weiterführung des Scriptes
            #finally
            #{
            #}
            #Zaehler wird erhöht um 1
            $global:Zaehler = $global:Zaehler + 1
            #Führe die Schleife solange aus, bis alle Reihen durch sind.
        }
       
     }
}
#****************************************************************************************************************************************************************************************************************************************************
function DeleteUser
{             
 #********************Benutzer werden gelöscht die sich nicht in der CSV-Datei befinden.*****************************************************************************************************************************************************************************************          
    #Alle Benutzer, die sich nicht in der CSV befinden, aber in der Active Directory vorhanden sind.

    #Führe die Schleife solange aus, bis alle Reihen der Benutzer durchgearbeitet sind, die sich nicht in der CSV befinden.
    foreach ($line in $Global:allUsersNotInCSV)
    {             
        #Try-Funktion, damit kein Fehler ausgegeben wird.   
        try
        {
            write-host "hoi";  
            echo "Lösche Benutzer: $line ..."   
            Remove-ADUser -Identity $line -Confirm:$false 
        }
        #Catch Abfangen und Ausgabe der Fehlermeldung (falls gewünscht) 
        catch
        {
        }
        #Weiterführung des Scriptes 
        finally
        {
        }
            
    }
           
}
           
#Do-while Schleife die solange ausgeführt wird, eine 3 eingegeben wird.
Do
{
    #Führe die Funktion "Menue" aus  
    Menue;
    
    if ($global:Eingabe -eq 1)
    {
        #Fuehre die Funktion Variables aus
        variabeln;
        #Führe die Funtkion "create user" aus  
        CreateUser;
        #Führe die Funktion "create log" aus  
        CreateLog;
        #Führe die Funktion "create Password" aus  
        CreatePassword;
        #Führe die Funktion "Delete User" aus  
        DeleteUser; 
        
     }        
#********************************************************************************************************************************************************************************************************************************
    if($global:Eingabe -eq 2)
    {
    write-host "*******************Ablauf**********************************************************************************************";  
    write-host "*Die MAC Benutzerverwaltung erstellt mit Hilfe von einer CSV-Datei Benutzer und löscht gleich auch automatisch diese, *";   
    write-host "*die nicht in der Liste eingetragen sind / bzw. sich auch in der Active Directory befinden.                           *";                              
    write-host "*Beachten Sie die Kommentare im Script fuer weitere Informationen. Bei Fragen wenden Sie sich an Gabriel Bühler       *";  
    write-host "***********************************************************************************************************************";  
    }
#Fuehre die Schleife solange aus, bis das Programm mit der Eingabe 3 beendet werden soll.
}while($global:Eingabe -ne 3)

Danke für die Hilfe. gabeBU out.