BATCH Active Directory Gruppenvergleiche
Ihr seid sicher in Umgebungen unterwegs in denen Powershell gesperrt ist... Also brauchen wir Batchscript-Hexerei...
Das Script hat noch einen Haufen Breakpoints...
@echo off
setlocal enabledelayedexpansion
REM ====================================
REM Autor: Knaab-Hinrichs
REM Datum: 2025-06-05
REM Beschreibung: Vergleicht Gruppenmitgliedschaften von zwei Domänenbenutzern
REM ====================================
REM Benutzer eingeben (Parameter oder Abfrage)
set "User1=%~1"
set "User2=%~2"
if "%User1%"=="" (
set /p User1=Benutzer 1 eingeben:
)
if "%User2%"=="" (
set /p User2=Benutzer 2 eingeben:
)
echo Usereingabe
pause
REM Pfade zu temporären Dateien
set "User1File=%TEMP%\user1.txt"
set "User2File=%TEMP%\user2.txt"
set "Groups1Clean=%TEMP%\CleanUser1Groups.txt"
set "Groups2Clean=%TEMP%\CleanUser2Groups.txt"
echo Gruppenpfade
pause
REM Benutzerinformationen abrufen
net user "%User1%" /DOMAIN > "%User1File%"
net user "%User2%" /DOMAIN > "%User2File%"
echo userabruf
pause
REM Gruppen extrahieren
call :ExtractGroups "%User1File%" "%Groups1Clean%"
echo Gruppenextrakt User 1
pause
call :ExtractGroups "%User2File%" "%Groups2Clean%"
echo Gruppenextrakt User 2
pause
REM Vergleich durchführen
echo.
echo ============================================
echo Gruppen in %User1% aber nicht in %User2%:
echo ============================================
for /f "delims=" %%g in ('type "%Groups1Clean%"') do (
set "found=no"
for /f "delims=" %%h in ('type "%Groups2Clean%"') do (
if /I "%%g"=="%%h" set "found=yes"
)
if "!found!"=="no" echo %%g
)
echo Gruppenvergleich
pause
REM Temporäre Dateien löschen
del "%User1File%" >nul 2>&1
del "%User2File%" >nul 2>&1
del "%Groups1Clean%" >nul 2>&1
del "%Groups2Clean%" >nul 2>&1
endlocal
pause
exit /b
REM =======================
REM Funktion: Gruppen extrahieren
REM =======================
:ExtractGroups
setlocal enabledelayedexpansion
set "InGroups=0"
set "OutFile=%~2"
> "%OutFile%" (
for /f "usebackq tokens=* delims=" %%L in (%~1) do (
set "Line=%%L"
REM Start der Gruppenliste erkennen
echo !Line! | findstr /C:"Globale Gruppenmitgliedschaften" >nul
if !errorlevel! == 0 (
set "InGroups=1"
for /f "tokens=2,* delims=:" %%A in ("!Line!") do (
echo %%B
)
) else if !InGroups! == 1 (
REM Nur Zeilen mit * am Anfang sind Gruppenzeilen
echo !Line! | findstr /R "^ [ ]*\*" >nul
if !errorlevel! == 0 (
echo !Line!
) else (
set "InGroups=0"
)
)
)
)
endlocal
exit /b