mr.error
Goto Top

Batch zum Zurücksetzen eines lokalen Profils

Ahoi!

Mir ist in diesem Forum schon sehr oft geholfen worden und daher wollte ich auch mal was zurück geben! Außerdem interessiert mich eure Meinung zum dem was ich mir da zusammen gebastelt habe. face-smile

Wir haben immer mal wieder das Problem, dass sich die lokalen Profile der User zerlegen. Daher müssen wir hier und da die lokalen Profile zurücksetzen. Da wir keine Server gespeicherten Profile haben müssen wir dann auch die Daten wieder hin und her schaufeln.

Da das immer wieder die gleichen Abläufe sind, habe ich den Vorgang zu einer Batch zusammen geschrieben. Schaut rein, evtl. kann ja Jemand das ganz Ding oder zumindest Teile davon gebrauchen! Das ist mein erstes "größeres" Skript, daher würde ich mich auch über Anmerkungen und Tipps freuen. face-smile

Aber nun genug der Worte, hier wir gehen:

@echo off

:: Prüfen ob als Domaenen Admin angemeldet
net user /domain %username% | find /I "Administratoren" >nul 2>&1  
if not %errorlevel%==1  ( 
	echo Sie sind als Domain-Admin angemeldet!
	goto check_user
)

:: Pruefen ob als lokaler Admin angemeldet
whoami /groups | find "S-1-16-12288" >nul 2>&1  
if not %errorlevel%==1 (
	echo Sie sind als lokaler Admin angemeldet!
	goto check_user
)

:check_user
:: Pruefen ob Berechtigung fuer den Reset ausreichen
echo Einen Moment Ihre Rechte werden geprueft!
net stop spooler > NUL
if not %errorlevel%==0 (
	echo Sie haben keine ausreichenden Berechtigungen für dieses Script!
	echo Bitte melden Sie sich als Admin an! 
	echo **********************************
	echo *Starten Sie die BATCH als ADMIN!*
	echo **********************************
	goto Ende
)

:: spooler wieder starten
net start spooler > NUL

:: Pruefen ob user angemeldet ist, der zurueck gesetzt werden soll
ECHO Der Benutzer %username% ist angemeldet! Soll dieses Profil zurueckgesetzt werden? (J / N)
SET /p wahl=
if /i not '%wahl%' == 'n' (if /i '%wahl%' == 'j' (goto Message ) ) else goto Reset   
if defined wahl ECHO Bitte fangen sie keine Unterhaltung an! 
ECHO Antworten Sie Bitte nur mit j fuer Ja oder n fuer Nein. & goto Frage 

:: Mitteilung angemledeter User
:Message
echo Waehrend der User mit dem beschaedigten Profil angemeldet ist, kann dieses nicht zurueckgesetzt werden!
echo Bitte Melden Sie sich Lokaler oder Domain Admin an!
goto Ende

:Reset
:: User festlegen
echo Sie haben Adminrechte und koennen ein lokales Profil zuruecksetzen!
echo Bitte geben Sie den Kontonamen des beschaedigten Profil ein!
set /p user=

:: Check ob user tatsaechlich als andere angemeldet ist
if %user%==%username% (
	echo Sie sind als der User angemeldet, der zurück gesetzt werden soll!
	goto Message
)

:: SID fuer user finden und Speichern
:: FOR /F "skip=1" %%i IN ('wmic useraccount where "name='%user%'" get sid') DO SET sid=%%i, war meine erste Idee, aber so wird die SID immer mit leerem Wert beschrieben  
wmic useraccount where "name='%user%'" get sid > reg.tmp  
FOR /F "skip=1" %%i IN ('type reg.tmp') DO SET sid=%%i  
del reg.tmp

:: Profilpfad aus Registry lesen, falls string vorhanden, sonst annehmen des VZ
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%sid%" /v ProfileImagePath >nul 2>&1  
if %errorlevel%==0 (
	FOR /F "tokens=3 skip=2" %%i IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%sid%" /v ProfileImagePath') DO SET profpath=%%i  
	echo Das Verzeichnis des gewählten Users befinet sich unter %profpath%
) ELSE set path=C:\users\%user%

:: Pruefen ob user vorhanden
if not exist %profpath% (
	echo Der eingebene User ist lokal nicht Vorhanden! Bitte richtigen Usernamen eingeben!
)

:: Prüfen ob schon ein Umbenannter Folder vorhanden ist
if exist C:\users\%user%_OLD (
	echo Es ist bereits ein USER_OLD Folder vorhanden!
	echo Bitte Korrigieren dann Script neustarten!
	goto Ende
)

:: Umbenennen und auf Erfolg prüfen
ren %profpath% %user%_OLD > check.txt
if not %errorlevel%==0 (
	echo Kein Zugriff auf das User Verzeichnis von %user%!
	echo Zugriffsrechte prüfen und Script Neustarten!
	goto Ende
)

:: User String aus der Profile-List entfernen
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%sid%" /v ProfileImagePath|find /I "%profpath%" >nul 2>&1  
if %errorlevel%==0 (
	Reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%sid%" /f  
)

:: Falls string nicht vorhanden
if not %errorlevel%==0 (
	ECHO Der Registrystring für %user% existiert nicht! Dennoch fortfahren? J/N
	set /p wahl=
	if /i not '%wahl%' == 'n' (if /i '%wahl%' == 'j' (goto TASKBATCH)) else goto Ende   
	if defined wahl ECHO Bitte fangen sie keine Unterhaltung an! 
	ECHO Antworten Sie Bitte nur mit j fuer Ja oder n fuer Nein. & goto Frage 
)	

goto TASKBATCH

:TASKBATCH
:: Aufgabe erstellen fuer Refill
schtasks /Create /RU %user% /SC BEIANMELDUNG /TN REFILL /TR C:\temp\reset.bat /IT /RL HÖCHSTE /DELAY 0001:30 /F >nul 2>&1

:: Refill Batch erstellen
echo @echo off >> C:\temp\reset.bat
echo set user=%%username%% >> C:\temp\reset.bat
echo set "user=%user: =%" >> C:\temp\reset.bat  
echo echo Ihre Daten werden zurueck kopiert! Bitte haben Sie einen Moment geduld! >> C:\temp\reset.bat
echo echo Bitte richten Sie Outlook ein und schließen Sie es wieder! >> C:\temp\reset.bat
echo echo Wenn Outlook eingerichtet ist, mit ENTER das Script fortsetzen! >> C:\temp\reset.bat
echo echo es werden Anschließend die Signaturen zurück kopiert! >> C:\temp\reset.bat
echo if exist "C:\Program Files (x86)\Microsoft Office\Office14" "C:\Program Files (x86)\Microsoft Office\Office14\outlook.exe" >> C:\temp\reset.bat  
echo if not exist "C:\Program Files (x86)\Microsoft Office\Office14" echo Office 32bit nicht installiert! >> C:\temp\reset.bat  
echo echo Warten bis Outlook eingerichtet ist! >> C:\temp\reset.bat
echo robocopy C:\Users\%%user%%_old\AppData\Roaming\Microsoft\Signatures %%APPDATA%%\Microsoft\Signatures /E >> C:\temp\reset.bat
echo robocopy C:\Users\%%user%%_OLD\ C:\Users\%%user%% /E /XF *.DAT* /XF *.ini /XD C:\Users\%%user%%_old\AppData /XD C:\Users\%%user%%_old\Anwendungsdaten /R:2 /W:5  >> C:\temp\reset.bat
echo goto Ende >> C:\temp\reset.bat
echo :Ende >> C:\temp\reset.bat >> C:\temp\reset.bat
echo echo Fertig! Alle Daten wurden zurück gespielt! >> C:\temp\reset.bat
echo schtasks /delete /TN REFILL >> C:\temp\reset.bat
echo del C:\Temp\reset.bat >> C:\temp\reset.bat
echo pause(); >> C:\temp\reset.bat

:: Abmelden und auf Wiederanmeldung warten
echo Sie werden in 30 Sekunden abgemeldet! Melden Sie sich danach mit dem User wieder an
echo dessen Profil Sie zurueck gesetzt haben!
timeout /t 30
logoff

goto Ende

:Ende
pause();

Vielen Dank für Ihre Aufmerksamkeit! ;)

Content-Key: 336406

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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr