Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Microsoft Windows Server

Mitglied: gabeBU

gabeBU (Level 1) - Jetzt verbinden

20.03.2014, aktualisiert 10:45 Uhr, 1556 Aufrufe, 3 Kommentare

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:

01.
<#*********************************************************************************************************************************************************************************************************************************** 
02.
*Titel: MAC Benutzerverwaltung 
03.
*Ersteller: Gabriel Buehler 
04.
*Erstellungsdatum: 26.02.2014 
05.
*Bearbeitungsdatum: 
06.
*Beschreibung: Mit diesem Script ist es möglich, alle MAC-Adressbenutzer zu verwalten und auch gleich automatisch zu löschen. 
07.
*Version: 1.1 
08.
***********************************************************************************************************************************************************************************************************************************#> 
09.
#Importierung des Moduls für das Arbeiten mit Active Directory 
10.
Import-Module ActiveDirectory 
11.
#Gruppenrichtlinie Updaten 
12.
#gpupdate /force 
13.
#******************************Funktion: Hauptmenü*************************************************************************************************************************************************************************************** 
14.
15.
 function Menue 
16.
17.
    Write-host "*******************HAUPTMENÜ******************************"; 
18.
    Write-host "Willkommen zur MAC Benutzerverwltung.                    *"; 
19.
    write-host "*1. Benutzer aus der CSV erstellen                       *"; 
20.
    write-host "*2. Erklaerung des Ablaufes                              *"; 
21.
    write-host "*3. Programm beenden                                     *"; 
22.
    write-host "**********************************************************"; 
23.
    $global:Eingabe = read-host "Eingabe"; 
24.
25.
function Variabeln 
26.
27.
       
28.
    #******************************Importierung*********************************************************************************************************************************************************************************** 
29.
    #Importierung der CSV-Datei 
30.
    $global:Import = @(Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv)   
31.
    #******************************Importierung*********************************************************************************************************************************************************************************** 
32.
    #******************************Pfad******************************************************************************************************************************************************************************************* 
33.
    #HIER EINZIGE ÄNDERUNG VORNEHMEN Stammpfad der uebergeordneten Organisationseinheiten  
34.
    $global:OUPath = "OU=Machines,OU=IPA,DC=IPA,DC=LOKAL"; 
35.
    #***************************************************************************************************************************************************************************************************************************** 
36.
    #*********************************Benutzername******************************************************************************************************************************************************************************** 
37.
    #Zaehler fuer das Abfragen jeder Reihe 
38.
    $global:Zaehler = 0; 
39.
    #Reihenzaehler fuer das Zaehlen der Reihen 
40.
    $global:Reihenzaehler = Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv | Measure-Object 
41.
    $global:Reihenzaehler.Count 
42.
    #Benutzername fuer die Passwortzuweisung 
43.
    #Jede Zeile mit der Zahl Zaehler (Zahl, die in einer DO-While-Schleife hochgezaehlt wird) den Wert "SamAccontName" (Kontoname) 
44.
    $global:Benutzername = $global:Import[$global:Zaehler].SamAccountName 
45.
    #********************************************************************************************************************************************************************************************************************************* 
46.
    #******************************1. Teil Vergleichsvariabeln************************************************************************************************************************************************************************ 
47.
    #Alle ADUser auswerfen für den direkten Vergleich mit der CSV-Datei 
48.
    $global:allADUsers = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty SamAccountName 
49.
    #Der Anzeigename (fuer die Log-Dateien) 
50.
    $global:allAdusersgiven = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty GivenName 
51.
    #Alle Benutzer der CSV-Datei 
52.
    #Der Anzeigename der Nutzer, die in der CSV eingetragen sind 
53.
    $global:allCSVUsersgiven = $global:Import | select -ExpandProperty GivenName 
54.
    #********************************************************************************************************************************************************************************************************************************* 
55.
    #******************************Importierung*************************************************************************************************************************************************************************************** 
56.
    #Importierung der CSV-Datei 
57.
    $global:Import = @(Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv)   
58.
    #******************************Importierung*************************************************************************************************************************************************************************************** 
59.
    #******************************Pfad*********************************************************************************************************************************************************************************************** 
60.
    #HIER EINZIGE ÄNDERUNG VORNEHMEN Stammpfad der uebergeordneten Organisationseinheiten  
61.
    $global:OUPath = "OU=Machines,OU=IPA,DC=IPA,DC=LOKAL"; 
62.
    #********************************************************************************************************************************************************************************************************************************* 
63.
    #*********************************Benutzername************************************************************************************************************************************************************************************ 
64.
    #Zaehler fuer das Abfragen jeder Reihe 
65.
    $global:Zaehler = 0; 
66.
    #Reihenzaehler fuer das Zaehlen der Reihen 
67.
    $global:Reihenzaehler = Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv | Measure-Object 
68.
    $global:Reihenzaehler.Count 
69.
    #Benutzername fuer die Passwortzuweisung 
70.
    #Jede Zeile mit der Zahl Zaehler (Zahl, die in einer DO-While-Schleife hochgezaehlt wird) den Wert "SamAccontName" (Kontoname) 
71.
    $global:Benutzername = $global:Import[$global:Zaehler].SamAccountName 
72.
    #********************************************************************************************************************************************************************************************************************************* 
73.
    #******************************1. Teil Vergleichsvariabeln************************************************************************************************************************************************************************ 
74.
    #Alle ADUser auswerfen für den direkten Vergleich mit der CSV-Datei 
75.
    $global:allADUsers = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty SamAccountName 
76.
    #Der Anzeigename (fuer die Log-Dateien) 
77.
    $global:allAdusersgiven = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty GivenName 
78.
    #Alle Benutzer der CSV-Datei 
79.
    $global:allCSVUsers = $global:Import | select -ExpandProperty SamAccountName 
80.
    #Der Anzeigename der Nutzer, die in der CSV eingetragen sind 
81.
    $global:allCSVUsersgiven = $global:Import | select -ExpandProperty GivenName 
82.
    #********************************************************************************************************************************************************************************************************************************* 
83.
    #******************************2. Teil Vergleichsvariabel zwischen AD und CSV***************************************************************************************************************************************************** 
84.
    #Try-Funktion, damit kein Fehler ausgegeben wird (falls sich kein Benutzer in der Active Directory oder im CSV befinden sollte).  
85.
    #try 
86.
    #{ 
87.
        #Vergleich zwischen der CSV und der AD, damit später alle Benutzer gelöscht werden, die sich nicht in der AD befinden. 
88.
        #Compare-Object Vergleich 
89.
        #Referenz: Alle Benutzer in der CSV 
90.
        #Differenz: Alle Benutzer die in der CSV sind 
91.
        #?{$global:_.SideIndicator -eq "<="} : Speichere diese Nutzer in der Variabel, die zwar in der ersten Variabel enthalten sind, aber NICHT in der zweiten 
92.
        #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 
93.
        #Erroraction Silently-Continue: Keine Fehlermeldung ausgeben 
94.
        #***************************************************************************************************************************************************************************************************************************** 
95.
        #AllusersnotinCSV der sAMAccountname entspricht der MAC-Adresse (der Kontonname). Dieser Vergleich wird fuer das eigentliche loeschen Verwendet. 
96.
        $global:allUsersNotInCSV = Compare-Object -ReferenceObject $global:allADUsers -DifferenceObject $global:allCSVUsers | ?{$global:_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue 
97.
        #AllusersnotinCSVgiven mit dem givenName wird fuer die Ausgabe der Anzeigename verwendet damit man weiss, welche Maschinen gelöscht werden. 
98.
        $global:allUsersNotInCSVgiven = Compare-Object -ReferenceObject $global:allADUsersgiven -DifferenceObject $global:allCSVUsersgiven | ?{$global:_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue 
99.
   # } 
100.
    #Catch Abfangen und Ausgabe der Fehlermeldung (falls gewünscht) 
101.
    #catch 
102.
    #{ 
103.
    #} 
104.
   # finally 
105.
    #{ 
106.
    #} 
107.
108.
#***************************************************************************************************************************************************************************************************************************************************** 
109.
function CreateUser 
110.
{  
111.
    #******************************Benutzer wird erstellt*********************************************************************************************************************************************************************************************           
112.
    #-i: Importmodus, Benutzer wird Importiert und nicht exportiert, deswegen muss der -i Parameter angegeben werden 
113.
    #-k: Keine Fehlermeldung angeben 
114.
    #-f: Dateiname der zu Importierenden Datei (hier: MACAdresslist.csv) 
115.
    #-j: Log-Datei erstellen. 
116.
    ##******************************Benutzer wird erstellt******************************************************************************************************************************************************************************************** 
117.
    #Benutzer wird aus der CSV  erstellt, mit  
118.
    csvde -i -k -f \\IPASRV01\Transfer\MACAdresslist.csv -j C:\ 
119.
    #Erstelle eine Log-Datei und exportiere sie in eine CSV, damit sie später weiterverarbeitet werden kann. 
120.
    $global:importcsvdelog = import-csv C:\csv.log | export-csv \\IPASRV01\Transfer\logs\csvde.csv 
121.
    #Importiere direkt die exportierte CSV. 
122.
    $global:importcsvde = import-csv \\IPASRV01\transfer\logs\csvde.csv 
123.
124.
#****************************************************************************************************************************************************************************************************************************************************** 
125.
function Createlog 
126.
127.
  #*******************************************Log-Dateien schreiben ************************************************************************************************************************************************************      
128.
    $global:log = @() 
129.
    #foreach($global:line in $global:importcsvde) 
130.
    #{ 
131.
     #   $global:log += New-Object PSObject -Property @{Titel="Neue User";Wert=$global:line} 
132.
    #} 
133.
    $global:log += New-Object PSObject -Property @{Titel = "Geloeschte User `n"; Wert = "$global:allusersnotincsvgiven"} 
134.
    $global:log += New-Object PSObject -Property @{Titel = "MAC-Adresse `n"; Wert = "$global:allusersnotincsv"} 
135.
    $global:log | select Titel,Wert | export-csv -Path "\\IPASRV01\Transfer\logs\MACLog.csv" -NoTypeInformation -Delimiter ";"   
136.
  
137.
138.
#*************************************************************************************************************************************************************************************************************************************************** 
139.
function CreatePassword 
140.
{         
141.
    #If-Abfrage, falls die CSV-Datei leer sein sollte. 
142.
    if ($global:Reihenzaehler.count -ne 0) 
143.
144.
        #Do-While-Schleife fuer das Abzaehlen der Reihen und der Zuweisung des Passwortes 
145.
        do 
146.
147.
            write-host "bisch sogar id schleife vom PW cho^^"; 
148.
            #Passwort setzen. Identity ist der Benutzername, das Passwort ist auch der Benutzername (MAC-Adresse). 
149.
            try 
150.
151.
                Set-AdAccountPassword -Identity $global:Benutzername -PassThru -Reset -Newpassword (ConvertTo-Securestring $global:Benutzername -Asplaintext -force) 
152.
153.
            catch 
154.
155.
156.
            #Weiterführung des Scriptes 
157.
            finally 
158.
159.
160.
            #Zaehler wird erhöht um 1 
161.
            $global:Zaehler = $global:Zaehler + 1 
162.
            #Führe die Schleife solange aus, bis alle Reihen durch sind. 
163.
        }while($global:Zaehler -ne $global:Reihenzaehler.Count) 
164.
165.
166.
#**************************************************************************************************************************************************************************************************************************************************** 
167.
function DeleteUser 
168.
{              
169.
 #********************Benutzer werden gelöscht die sich nicht in der CSV-Datei befinden.*****************************************************************************************************************************************************************************************           
170.
    #Alle Benutzer, die sich nicht in der CSV befinden, aber in der Active Directory vorhanden sind. 
171.
    foreach ($line in $global:allUsersNotInCSV) 
172.
    {              
173.
        #Try-Funktion, damit kein Fehler ausgegeben wird.    
174.
        try 
175.
176.
            write-host "hoi"; 
177.
            echo "Lösche Benutzer: $global:line ..."  
178.
            Remove-ADUser -Identity $global:line -Confirm:$global:false  
179.
180.
        #Catch Abfangen und Ausgabe der Fehlermeldung (falls gewünscht)  
181.
        catch 
182.
183.
184.
        #Weiterführung des Scriptes  
185.
        finally 
186.
187.
188.
             
189.
190.
            
191.
192.
            
193.
#Do-while Schleife die solange ausgeführt wird, eine 3 eingegeben wird. 
194.
Do 
195.
196.
    #Führe die Funktion "Menue" aus 
197.
    Menue; 
198.
     
199.
    if ($global:Eingabe -eq 1) 
200.
201.
        #Fuehre die Funktion Variables aus 
202.
        variabeln; 
203.
        #Führe die Funtkion "create user" aus 
204.
       #CreateUser; 
205.
        #Führe die Funktion "create log" aus 
206.
        CreateLog; 
207.
        #Führe die Funktion "create Password" aus 
208.
        CreatePassword; 
209.
        #Führe die Funktion "Delete User" aus 
210.
        DeleteUser;  
211.
         
212.
     }         
213.
#******************************************************************************************************************************************************************************************************************************** 
214.
    if($global:Eingabe -eq 2) 
215.
216.
    write-host "*******************Ablauf**********************************************************************************************"; 
217.
    write-host "*Die MAC Benutzerverwaltung erstellt mit Hilfe von einer CSV-Datei Benutzer und löscht gleich auch automatisch diese, *";  
218.
    write-host "*die nicht in der Liste eingetragen sind / bzw. sich auch in der Active Directory befinden.                           *";                             
219.
    write-host "*Beachten Sie die Kommentare im Script fuer weitere Informationen. Bei Fragen wenden Sie sich an Gabriel Bühler       *"; 
220.
    write-host "***********************************************************************************************************************"; 
221.
222.
#Fuehre die Schleife solange aus, bis das Programm mit der Eingabe 3 beendet werden soll. 
223.
}while($global:Eingabe -ne 3) 
224.
 
(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
Mitglied: colinardo
LÖSUNG 20.03.2014, aktualisiert um 15:35 Uhr
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
Bitte warten ..
Mitglied: gabeBU
20.03.2014 um 11:23 Uhr
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....
Bitte warten ..
Mitglied: gabeBU
20.03.2014 um 14:18 Uhr
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.
01.
<#*********************************************************************************************************************************************************************************************************************************** 
02.
*Titel: MAC Benutzerverwaltung 
03.
*Ersteller: Gabriel Buehler 
04.
*Erstellungsdatum: 26.02.2014 
05.
*Bearbeitungsdatum: 
06.
*Beschreibung: Mit diesem Script ist es möglich, alle MAC-Adressbenutzer zu verwalten und auch gleich automatisch zu löschen. 
07.
*Version: 1.5  
08.
*Beschreibung: IPA-Final 
09.
***********************************************************************************************************************************************************************************************************************************#> 
10.
#Importierung des Moduls für das Arbeiten mit Active Directory 
11.
Import-Module ActiveDirectory 
12.
#Gruppenrichtlinie Updaten 
13.
#gpupdate /force 
14.
#****************************************************************Variabeln*********************************************************************************************************************************************************  
15.
    #******************************Importierung*********************************************************************************************************************************************************************************** 
16.
    #Importierung der CSV-Datei 
17.
    $global:Import = @(Import-CSV \\IPASRV01\Transfer\MACAdresslist.csv)   
18.
    #******************************Importierung*********************************************************************************************************************************************************************************** 
19.
    #******************************Pfad******************************************************************************************************************************************************************************************* 
20.
    #HIER EINZIGE ÄNDERUNG VORNEHMEN Stammpfad der uebergeordneten Organisationseinheiten  
21.
    $global:OUPath = "OU=Machines,OU=IPA,DC=IPA,DC=LOKAL"; 
22.
    #******************************1. Teil Vergleichsvariabeln************************************************************************************************************************************************************************ 
23.
    #Alle ADUser auswerfen für den direkten Vergleich mit der CSV-Datei 
24.
    $global:allADUsers = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty SamAccountName 
25.
    #Der Anzeigename (fuer die Log-Dateien) 
26.
    $global:allAdusersgiven = Get-ADUser -Filter * -SearchBase $global:OUPath | select -ExpandProperty GivenName 
27.
    #Alle Benutzer der CSV-Datei. 
28.
    $global:allCSVUsers = $global:Import | select -ExpandProperty sAMAccountName 
29.
    #Der Anzeigename der Nutzer, die in der CSV eingetragen sind 
30.
    $global:allCSVUsersgiven = $global:Import | select -ExpandProperty GivenName 
31.
#****************************************************************Log-Files********************************************************************************************************************************************************* 
32.
 
33.
  <#*******************************************Log-Dateien schreiben ************************************************************************************************************************************************************  
34.
    # Aus jeder Zeile die später in der CSV-Datei erscheinen soll, wird ein Powershell-Objekt   
35.
    generiert das seinerseits eine Hashtable mit den Spaltennamen und Werten enthält.  
36.
    Diese Objekte fügen wir dann an ein Array an, welches zum Schluss an export-csv übergeben wird.  
37.
    Das zwischengeschaltete select stellt sicher das die Reihenfolge der Spalten in der CSV-Datei wieder stimmt. Die erste Foreach-Schlaufe ist fuer den 
38.
    CSVDE-Log. Da dieser aus einer anderen CSVDE-Datei importiert wird, muss jede Zeile einzeln mit einer Schlaufe eingelesen werden. 
39.
  #>  
40.
     
41.
     $log = @(); 
42.
    foreach($line in $global:importcsvde) 
43.
44.
        $log += New-Object PSObject -Property @{Titel="Neue User";Wert=$line} 
45.
46.
    $log += New-Object PSObject -Property @{Titel = "Geloeschte User `n"; Wert = $global:allUsersNotInCSVgiven} 
47.
    $log += New-Object PSObject -Property @{Titel = "MAC-Adresse `n"; Wert = $global:allUsersNotInCSV} 
48.
    $log | select Titel,Wert | export-csv -Path "\\IPASRV01\Transfer\logs\MACLog.csv" -NoTypeInformation -Delimiter ";"   
49.
#********************************************************************************************************************************************************************************************************************************* 
50.
#Funktion Variabeln: werden nicht mehr richtig weitergegeben, deswegen sind sie nicht mehr in einer FUnktion gespeichert. Kann zu übungszwecken versucht werden. 
51.
function variabeln 
52.
53.
54.
#******************************Funktion: Hauptmenü*************************************************************************************************************************************************************************************** 
55.
56.
 function Menue 
57.
58.
    Write-host "*******************HAUPTMENÜ******************************"; 
59.
    Write-host "Willkommen zur MAC Benutzerverwltung.                    *"; 
60.
    write-host "*1. Benutzer aus der CSV erstellen                       *"; 
61.
    write-host "*2. Erklaerung des Ablaufes                              *"; 
62.
    write-host "*3. Programm beenden                                     *"; 
63.
    write-host "**********************************************************"; 
64.
    $global:Eingabe = read-host "Eingabe"; 
65.
66.
 
67.
    #******************************2. Teil Vergleichsvariabel zwischen AD und CSV***************************************************************************************************************************************************** 
68.
    #Try-Funktion, damit kein Fehler ausgegeben wird (falls sich kein Benutzer in der Active Directory oder im CSV befinden sollte).  
69.
    try 
70.
71.
        #Vergleich zwischen der CSV und der AD, damit später alle Benutzer gelöscht werden, die sich nicht in der AD befinden. 
72.
        #Compare-Object Vergleich 
73.
        #Referenz: Alle Benutzer in der CSV 
74.
        #Differenz: Alle Benutzer die in der CSV sind 
75.
        #?{$global:_.SideIndicator -eq "<="} : Speichere diese Nutzer in der Variabel, die zwar in der ersten Variabel enthalten sind, aber NICHT in der zweiten 
76.
        #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 
77.
        #Erroraction Silently-Continue: Keine Fehlermeldung ausgeben 
78.
        #***************************************************************************************************************************************************************************************************************************** 
79.
        #AllusersnotinCSV der sAMAccountname entspricht der MAC-Adresse (der Kontonname). Dieser Vergleich wird fuer das eigentliche loeschen Verwendet. 
80.
        $global:allUsersNotInCSV = Compare-Object -ReferenceObject $global:allADUsers -DifferenceObject $global:allCSVUsers | ?{$global:_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue 
81.
        #AllusersnotinCSVgiven mit dem givenName wird fuer die Ausgabe der Anzeigename verwendet damit man weiss, welche Maschinen gelöscht werden. 
82.
        $global:allUsersNotInCSVgiven = Compare-Object -ReferenceObject $global:allADUsersgiven -DifferenceObject $global:allCSVUsersgiven | ?{$global:_.SideIndicator -eq "<="} | select  -ExpandProperty InputObject -erroraction SilentlyContinue 
83.
        $global:allUsersNotInCSV 
84.
        $global:allUsersNotInCSVgiven 
85.
86.
    #Catch Abfangen und Ausgabe der Fehlermeldung (falls gewünscht) 
87.
    catch 
88.
89.
90.
     finally 
91.
92.
93.
 
94.
#***************************************************************************************************************************************************************************************************************************************************** 
95.
function CreateUser 
96.
{  
97.
    #******************************Benutzer wird erstellt*********************************************************************************************************************************************************************************************           
98.
    #-i: Importmodus, Benutzer wird Importiert und nicht exportiert, deswegen muss der -i Parameter angegeben werden 
99.
    #-k: Keine Fehlermeldung angeben 
100.
    #-f: Dateiname der zu Importierenden Datei (hier: MACAdresslist.csv) 
101.
    #-j: Log-Datei erstellen. 
102.
    ##******************************Benutzer wird erstellt******************************************************************************************************************************************************************************************** 
103.
    #Benutzer wird aus der CSV  erstellt, mit  
104.
    csvde -i -k -f \\IPASRV01\Transfer\MACAdresslist.csv -j C:\ 
105.
    #Erstelle eine Log-Datei und exportiere sie in eine CSV, damit sie später weiterverarbeitet werden kann. 
106.
    $global:importcsvdelog = import-csv C:\csv.log | export-csv \\IPASRV01\Transfer\logs\csvde.csv 
107.
    #Importiere direkt die exportierte CSV. 
108.
    $global:importcsvde = import-csv \\IPASRV01\transfer\logs\csvde.csv 
109.
110.
#****************************************************************************************************************************************************************************************************************************************************** 
111.
#Funktion Create log. Auch hier werden die Variabeln nicht richtig weitergegeben, deswegen bleiben sie im eigentlichen Script. Kann zu übungszwecken versucht werden.********************************************************************************* 
112.
function Createlog 
113.
114.
     
115.
116.
#*************************************************************************************************************************************************************************************************************************************************** 
117.
function CreatePassword 
118.
{         
119.
    #If-Abfrage, falls die CSV-Datei leer sein sollte. 
120.
    if ($global:Reihenzaehler.count -ne 0) 
121.
122.
        #Führe die Schleife solange aus, bis alle Reihen der Import-Datei durch sind. 
123.
        foreach ($line in $Global:Import) 
124.
125.
            write-host "bisch sogar id schleife vom PW cho^^"; 
126.
            #Passwort setzen. Identity ist der Benutzername, das Passwort ist auch der Benutzername (MAC-Adresse). 
127.
           # try 
128.
            #{ 
129.
                Set-AdAccountPassword -Identity $line.SamAccountName -PassThru -Reset -Newpassword (ConvertTo-Securestring $line.SamAccountName -Asplaintext -force) 
130.
            #} 
131.
            #catch 
132.
            #{ 
133.
            #} 
134.
            #Weiterführung des Scriptes 
135.
            #finally 
136.
            #{ 
137.
            #} 
138.
            #Zaehler wird erhöht um 1 
139.
            $global:Zaehler = $global:Zaehler + 1 
140.
            #Führe die Schleife solange aus, bis alle Reihen durch sind. 
141.
142.
        
143.
144.
145.
#**************************************************************************************************************************************************************************************************************************************************** 
146.
function DeleteUser 
147.
{              
148.
 #********************Benutzer werden gelöscht die sich nicht in der CSV-Datei befinden.*****************************************************************************************************************************************************************************************           
149.
    #Alle Benutzer, die sich nicht in der CSV befinden, aber in der Active Directory vorhanden sind. 
150.
 
151.
    #Führe die Schleife solange aus, bis alle Reihen der Benutzer durchgearbeitet sind, die sich nicht in der CSV befinden. 
152.
    foreach ($line in $Global:allUsersNotInCSV) 
153.
    {              
154.
        #Try-Funktion, damit kein Fehler ausgegeben wird.    
155.
        try 
156.
157.
            write-host "hoi"; 
158.
            echo "Lösche Benutzer: $line ..."  
159.
            Remove-ADUser -Identity $line -Confirm:$false  
160.
161.
        #Catch Abfangen und Ausgabe der Fehlermeldung (falls gewünscht)  
162.
        catch 
163.
164.
165.
        #Weiterführung des Scriptes  
166.
        finally 
167.
168.
169.
             
170.
171.
            
172.
173.
            
174.
#Do-while Schleife die solange ausgeführt wird, eine 3 eingegeben wird. 
175.
Do 
176.
177.
    #Führe die Funktion "Menue" aus 
178.
    Menue; 
179.
     
180.
    if ($global:Eingabe -eq 1) 
181.
182.
        #Fuehre die Funktion Variables aus 
183.
        variabeln; 
184.
        #Führe die Funtkion "create user" aus 
185.
        CreateUser; 
186.
        #Führe die Funktion "create log" aus 
187.
        CreateLog; 
188.
        #Führe die Funktion "create Password" aus 
189.
        CreatePassword; 
190.
        #Führe die Funktion "Delete User" aus 
191.
        DeleteUser;  
192.
         
193.
     }         
194.
#******************************************************************************************************************************************************************************************************************************** 
195.
    if($global:Eingabe -eq 2) 
196.
197.
    write-host "*******************Ablauf**********************************************************************************************"; 
198.
    write-host "*Die MAC Benutzerverwaltung erstellt mit Hilfe von einer CSV-Datei Benutzer und löscht gleich auch automatisch diese, *";  
199.
    write-host "*die nicht in der Liste eingetragen sind / bzw. sich auch in der Active Directory befinden.                           *";                             
200.
    write-host "*Beachten Sie die Kommentare im Script fuer weitere Informationen. Bei Fragen wenden Sie sich an Gabriel Bühler       *"; 
201.
    write-host "***********************************************************************************************************************"; 
202.
203.
#Fuehre die Schleife solange aus, bis das Programm mit der Eingabe 3 beendet werden soll. 
204.
}while($global:Eingabe -ne 3) 
205.
 
Danke für die Hilfe. gabeBU out.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Powershell Datei kopieren mit ACL Script funktioniert nicht (4)

Frage von xpxy15 zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell Script Move-Item nach x Tagen (5)

Frage von lupolo zum Thema Batch & Shell ...

VB for Applications
Powershell Script aus VBA heraus ausführen (2)

Frage von mcnico1978 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...