45455
Goto Top

Ungültiger Parameter icacls in FOR-Schleife

Hallo,

ich steh etwas auf dem Schlauch.

Folgendes bringt mir immer nur die Fehlermeldung Ungültiger Parameter "Domänen-Admins" und Ungültiger Parameter "System"

1
2
3
4
for /d %%i in (*.*) do (
	icacls %%i /inheritance:r /grant "Domänen-Admins"  
	icacls %%i /inheritance:r /grant "System"  
)

Setze ich einfach nur die Variable, anstatt eine For-Schleife zu definieren, funktionieren die Zeilen aber.
Verkettung mit & dasselbe.

Was mach ich da falsch?

Gruß
Kai

Content-ID: 258532

Url: https://administrator.de/forum/ungueltiger-parameter-icacls-in-for-schleife-258532.html

Ausgedruckt am: 11.04.2025 um 19:04 Uhr

114757
114757 26.12.2014 aktualisiert um 11:23:52 Uhr
Goto Top
Moin Kai,
ich würde die Laufvariable mal in Anführungszeichen setzen, wenn nämlich Leerzeichen im Pfad vorkommen gibt's da eben Probleme:
Und du gibst dem User ja gar keine Rechte mit...
icacls "%%i" /inheritance:r /grant System:(OI)(CI)F
Gruß jodel32
45455
45455 26.12.2014 aktualisiert um 11:26:49 Uhr
Goto Top
Damit hab ich auch schon rumprobiert, allerdings ohne Änderung des Ergebnisses.

Leerzeichen sind da auch nicht im Pfad.
Zum einen verwende ich keinen vollen Pfad, sondern nur die Unterordner des Startverzeichnisses, zum anderen geht's ja ohne For-Schleife mit der identischen Zeile.

Daher bin ich ja auch ratlos. Mir fällt kein Grund mehr ein, warum das nicht funktioniert.
Prüfe ich die Zeilen mit echo vorher, werden sie ja auch korrekt wiedergegeben.
Da steht dann zB.:
1
icacls Ordner /inheritance:r /grant "System"  
Und eben diese Zeile funktioniert ja eigentlich.

Gruß
kai
Endoro
Endoro 26.12.2014 aktualisiert um 11:27:48 Uhr
Goto Top
Hey, auf jeden Fall fehlt eine permission mask, etwa so:
1
2
3
4
for /d %%a in (*) do (
	icacls "%%~a" /inheritance:r /grant "Domänen-Admins":(OI)(CI)  
	icacls "%%~a" /inheritance:r /grant "System":(OI)(CI)  
)
Gruß, Endoro
45455
45455 26.12.2014 um 11:35:29 Uhr
Goto Top
Klar, nur leider führt die Angabe dieser dazu, dass das Skript sofort abgebrochen wird.
Selbst wenn ich vorher ein pause einfüge, sehe ich rein gar nichts mehr, das Skript-Fenster schließt bei der Ausführung sofort.

Gruß
kai
114757
114757 26.12.2014 aktualisiert um 11:53:30 Uhr
Goto Top
Zitat von @45455:

Klar, nur leider führt die Angabe dieser dazu, dass das Skript sofort abgebrochen wird.
dahinter Fehlt noch die Angabe des Rechts z.B. F für FullAccess,siehe meine Zeile oben,
/grant System:(OI)(CI)F
dann führe das Script mal in einer Konsole direkt aus, und entferne das @echo off dann siehst du was Sache ist !
Hier läuft es übrigens ohne Probleme, du musst uns irgendwas in deinem Script verschweigen.
rubberman
Lösung rubberman 26.12.2014 aktualisiert um 21:45:24 Uhr
Goto Top
Hallo Zusammen,

ich könnte mir vorstellen, dass bereits die erste schließende Klammer im DO Block als Abschluss des Blocks interpretiert wird. Maskiere mal (OI) & Co. zu (OI^).

Grüße
rubberman
45455
45455 26.12.2014 aktualisiert um 21:47:10 Uhr
Goto Top
Vielen Dank! DAS war die Lösung.
Nun funktioniert es wunderbar.
Offenbar passiert das sogar bei der &-Verkettung.

Gruß
Kai
rubberman
rubberman 26.12.2014 um 22:37:25 Uhr
Goto Top
Hallo Kai.

Offenbar passiert das sogar bei der &-Verkettung.
Eigentlich nicht. Es sei denn, du hast das Ganze in einem weiteren Klammerausdruck stehen, dann wird dieser Block natürlich auch durch die ")" in einer der Kommandozeilen abgeschlossen.
Pseudocode ...
1
2
3
4
5
6
7
8
if <Condition> (
  <Command>
  <Command>
  <Command>
  icacls "<Directory>" /inheritance:r /grant "System":(OI)(CI)F  
  <Command>
  <Command>
)
... wäre so ein Beipiel. Korrekte Codeeinrückung hilft dir, so etwas frühzeitig zu entdecken (auch unpaarige Klammern etc.)

Grüße
rubberman
Endoro
Endoro 27.12.2014 um 01:11:02 Uhr
Goto Top
Hallo rubberman, es sind immer wieder diese nickligen "Kleinigkeiten" face-plain

Wenigstens zu Weihnachten könnte Batch mal so tun, als wäre es eine "richtige" Sprache face-smile
Gruß, Endoro
rubberman
rubberman 27.12.2014 aktualisiert um 02:28:31 Uhr
Goto Top
Hallo Endoro.

Wenigstens zu Weihnachten könnte Batch mal so tun, als wäre es eine "richtige" Sprache face-smile
Die Redmonder hatten es in der Hand, als sie mit den NT Versionen die cmd.exe und die zugehörige *.cmd Dateierweiterung eingeführt haben. Naja ... das ist Geschichte.

Die PowerShell wäre ein wunderbarer Ersatz. Leider ist sie für mich nutzlos, da ich Scripts zumeist beruflich nutze, um mir die Arbeit zu erleichtern. Leider haben unsere Admins ihre Hände darauf gelegt und die Ausführung von PowerShell per Gruppenrichtlinie untersagt... face-sad Im Moment sehe ich also noch keinen Anlass mich intensiver damit zu beschäftigen und muss weiterhin die Unzulänglichkeiten und das undefinierte Verhalten von Batch studieren.

Grüße
rubberman