AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
Hallo in die Runde!
Ich habe eine Ergänzungsfrage zu einem alten Thread von mir.
Ausgangslage ist die Batchdatei, die damals herausgekommen ist:
Hingrund: In dem Ordner Schuelerdaten befinden sich die einzelnen Schülerordner. Bei diesen sollten die Berechtigungen neu gesetzt werden. Damals war es einfach, der Anmeldename des Schülers entsprach dem Ordnernamen.
Am anderen Standort ist die Lage schwieriger. Der Ordnername entspricht dem Anzeigename des Benutzers, nicht mehr dem eigentlichen Objekt- oder Anmeldenamen. Kann ich die Batchdatei oben so erweitern, dass bei jedem gefundenen Ordner das AD abgefragt wird? Ich gebe den Ordnernamen (%%~nxa, der ja zugleich Anzeigename des Benutzer ist) in die Abfrage hinein und bekomme den eigentlichen Benutzernamen heraus, den ich für die ICACLS-Funktion brauche?
Schöne Grüße von der Elbe!
Winfried
Ich habe eine Ergänzungsfrage zu einem alten Thread von mir.
Ausgangslage ist die Batchdatei, die damals herausgekommen ist:
Chcp 1252
for /d %%a in ("D:\Schuelerdaten\*") do icacls "%%~a" /T /C /grant "%%~nxa":(OI)(CI)F
Hingrund: In dem Ordner Schuelerdaten befinden sich die einzelnen Schülerordner. Bei diesen sollten die Berechtigungen neu gesetzt werden. Damals war es einfach, der Anmeldename des Schülers entsprach dem Ordnernamen.
Am anderen Standort ist die Lage schwieriger. Der Ordnername entspricht dem Anzeigename des Benutzers, nicht mehr dem eigentlichen Objekt- oder Anmeldenamen. Kann ich die Batchdatei oben so erweitern, dass bei jedem gefundenen Ordner das AD abgefragt wird? Ich gebe den Ordnernamen (%%~nxa, der ja zugleich Anzeigename des Benutzer ist) in die Abfrage hinein und bekomme den eigentlichen Benutzernamen heraus, den ich für die ICACLS-Funktion brauche?
Schöne Grüße von der Elbe!
Winfried
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 361446
Url: https://administrator.de/forum/ad-abfrage-in-batchdatei-und-ergebnis-als-variable-verarbeiten-361446.html
Ausgedruckt am: 02.04.2025 um 06:04 Uhr
19 Kommentare
Neuester Kommentar

@echo off &setlocal enabledelayedexpansion
chcp 1252
for /d %%a in ("D:\Schuelerdaten\*") do (
for /f "tokens=2 delims=: " %%b in ('dsquery user -Name "%%~nxa" ^| dsget user -sid -L ^| findstr "sid:" 2^>nul') do icacls "%%~a" /T /C /grant *%%b:^(OI^)^(CI^)F
)

Wenn du es selber abänderst ohne zu wissen was du damit anstellst kein Wunder, du hast es falsch angepasst und die Ausrufezeichen falsch durch Prozentzeichen ersetzt das kann niemals gehen wegen delayed expansion!! Also nochmal richtig kopieren.
Wurde hier getestet und funktioniert.
Wurde hier getestet und funktioniert.

Kopier es einfach nochmal.

Hast du die Domäne im ICACLS Befehl eingetragen ?

Habs mal oben auf Verwendung von SIDs angepasst dann brauchst du keine Domäne eintragen.

Die ^ müssen bei einer FOR-Schleife wegen des Pipe-Symbols rein! Bei einer Ausführung in einer reinen CMD natürlich nicht!
Welches OS verwendest du?
Guckst du ...
Ich würde ja das ganze sowieso in Powershell machen wenn man schon einen Windows Server vewendet, da hantiert man ja nicht mit solchen 80er Krücken rum ...
Welches OS verwendest du?
Guckst du ...
Ich würde ja das ganze sowieso in Powershell machen wenn man schon einen Windows Server vewendet, da hantiert man ja nicht mit solchen 80er Krücken rum ...

Dann ist mir alles klar ...mach das am Server die Befehle sind dort vorgesehen.

Ist ergänzt.
Bezgl chcp da hast du wohl beim Speichern des Scripts ein Kodierungsproblem der Datei.
Bezgl chcp da hast du wohl beim Speichern des Scripts ein Kodierungsproblem der Datei.

Vermutlich verwendet dein dsget/dsquery auf deinem Windows 7 eine andere Codepage und deswegen kommt es damit nicht klar. Hier auf einem SRV2012R2 kein Problem.

Naja. noch ein Grund endlich zur Powershell zu switchen, wir leben in 2018 nicht 1980.