heiko.wellendorf
Goto Top

Per Batch Berechtigungen für Benutzerprofile ändern

Wie kann ich möglichst effizient per Batch NTFS Berechtigungen ändern / hinzufügen?

Moin zusammen,

ich habe ein kleines Problem. Auf einem Fileserver liegen Benutzerprofile.
Da ist nun etwas durcheinander gekommen und einige Benutzer haben keine Vollen Rechte mehr auf Ihr Profil.
Es betrifft ca. 250 Profile, jedes einzeln zu bearbeiten wäre ja ziemlich aufwendet. Da dachte ich - Per Batch und Skript! face-smile

... Jetzt dachte ich so.

Beispiel:
for /f "delims=" %%i in ('dir /b /ad "C:\Dokumente und Einstellungen\"') do @echo C:\Dokumente und Einstellungen\%%i>>ProfileList.txt  
Die Liste nehme ich dann und ein zweites Script nimmt den Inhalt

In dem Fall steht z.B. das drin: C:\Dokumente und Einstellungen\Lars.Testbenutzer

Und vergibt dann über subinacl oder ähnlichem die Berechtigung für den Benutzer lars.testbenutzer.
Jetzt ist das gar nicht so einfach.. Wie kommme ich jetzt jeweils an den Benutzernamen ran?
Nun da dachte ich selbes spiel.. aber nein. Das geht ja nicht so einfach.

... Ich hab gerade kein Plan mehr wie man das in einem kleinen Script realisieren könnte.
Habt ihr da ne Idee? Wäre ganz dankbar face-smile

Lieber Gruß aus Hamburg
Heiko

Content-ID: 194192

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

Penny.Cilin
Penny.Cilin 13.11.2012 um 16:16:03 Uhr
Goto Top
hallo Heiko,

schau Dir mal CACLS oder XCACLS (Ressource Kit Windows Server 2003) an. Damit kannst Du die Berechtigungen in eine Datei umleiten. Dann kannst Du diese via Batch neu setzen.

Under Windows 7 bzw. Windows Server 2008 heißt das Tool ICACLS.


Gruss Penny.
heiko.wellendorf
heiko.wellendorf 13.11.2012 um 16:19:34 Uhr
Goto Top
Das Tool kenne ich.. aber ich hab gerade so ne Blockade wo ich nicht weiterkomme..

Ich hab n Userprofile X auf D:\Profile, dort sind 250 Profilordner und auf jeden Ordner muss der USer selbst wieder vollzugriff haben face-sad ...

Gibts da kein Zweizeiler oder so?
DerWoWusste
DerWoWusste 13.11.2012 um 16:28:23 Uhr
Goto Top
Moin.

Generier eine Liste von Usern.
Dann lass eine For-schleife gegen diese Liste arbeiten, die mit icacls Rechte setzt bzw. mit subinacl Besitzer. Also sowas wie
icacls ...\\server\share\%%a .../grant %%a:m
heiko.wellendorf
heiko.wellendorf 13.11.2012 um 16:54:00 Uhr
Goto Top
for /f "tokens=1,2,3 delims=\" %%a in (C:\ProfileList.txt) do (
echo.
echo Variable 1 %%a
echo Variable 2 %%b
echo Variable 3 %%c
echo.
:: Variablen zusammensetzen
set pfad=%%a\%%c\%%c
set benutzer=%%c
echo ntfsrechtetool %pfad% %benutzer% vollzugriff
pause
)


Sowas in die Richtung stelle ich mir dann vor?! ..
Hmm... warum kann ich pfad und benutzer nicht als variable benutzen? da ist das echo für pfad und benutzer leer face-sad
Ach mensch .. .
bastla
bastla 13.11.2012 aktualisiert um 17:05:18 Uhr
Goto Top
Hallo heiko.wellendorf und willkommen im Forum!

Du brauchst doch überhaupt keine eigenen Variablen für Pfad und Benutzer:
for /f "delims=" %%a in (C:\ProfileList.txt) do (  
    echo ntfsrechtetool "%%a" "%%~nxa" vollzugriff  
)
Die Textdatei wäre übrigens auch nicht nötig gewesen:
for /d %%a in (D:\Profile\*) do (
    echo ntfsrechtetool "%%a" "%%~nxa" vollzugriff  
)
Grüße
bastla
heiko.wellendorf
heiko.wellendorf 13.11.2012 um 17:09:36 Uhr
Goto Top
... Was soll ich da jetzt sagen? Krass!
Das klappt toll, hätte nicht gedacht das man das so kürzen kann.
heiko.wellendorf
heiko.wellendorf 14.11.2012 um 08:19:32 Uhr
Goto Top
for /d %%a in ("B:\Profile\*") do (
@cscript //nologo "%windir%\xcacls.vbs" "%%a" /G "kit\%%~nxa":F /E
)


So läuft es und macht genau was es soll.
Danke an alle die mir geholfen haben face-smile

Gruß
Heiko
Penny.Cilin
Penny.Cilin 14.11.2012 um 15:27:32 Uhr
Goto Top
Warum nimmst Du nicht die xcacls.exe aus dem Ressource Kit.
Stattdessen nutzt Du VB-Script.
bastla
bastla 14.11.2012 um 17:03:18 Uhr
Goto Top
... oder noch billiger:
for /d %%a in ("B:\Profile\*") do cacls "%%a" /G "kit\%%~nxa":F /E
Grüße
bastla
Sewman
Sewman 05.03.2013 um 08:34:26 Uhr
Goto Top
Hi,

ich greife das Thema mal auf.

Könntet ihr mir erklären, wie ich per Script eine Gruppe bei den Berechtigungen hinzufügen kann.

Gruß
Sew
bastla
bastla 05.03.2013 um 19:25:01 Uhr
Goto Top
Hallo Sewman!
wie ich per Script eine Gruppe bei den Berechtigungen hinzufügen kann.
Genauso, wie einen User - bei "cacls" etwa mit
cacls "D:\Dein Ordner" /e /g DeineGruppe:R
bzw
cacls "D:\Dein Ordner" /e /g DeineDomain\DeineGruppe:R
Grüße
bastla
Sewman
Sewman 07.03.2013 um 15:24:40 Uhr
Goto Top
Danke schön, hab leider im Moment zu viel um die Ohren, melde mich sobald ich mich dran gesetzt habe.

Gruß
Sew
Sewman
Sewman 27.03.2013 um 08:03:48 Uhr
Goto Top
Hi,

habe jetzt ein wenig getestet.

Das kam dabei raus:

icacls.exe c:\temp\Test /T /C /grant ads.test.de\A-TestFdMgmt:F

Kann ich mir auch ein Logfile ausgeben lassen, nach dem durchlaufen?

Würde das ganze gerne als Job dann wöchtentlich laufen lassen, und mir hinterher entspannt die Logfiles anzeigen.

Gruß
Sew
bastla
bastla 27.03.2013 um 11:01:07 Uhr
Goto Top
Hallo Sewman!

Du kannst die Ausgabe mit
>>D:\Dein.log icacls.exe c:\temp\Test /T /C /grant ads.test.de\A-TestFdMgmt:F
umleiten (mit ">>" wird an eine schon bestehende Datei angefügt, mit ">" eine schon bestehende Datei überschrieben) ...

Mit
>D:\Rights.txt icacls.exe c:\temp\Test /T /C
kannst Du die derzeit gesetzten Rechte anzeigen (bzw durch die Umleitung die Ausgabe in eine Datei schreiben) lassen.

Grüße
bastla
Sewman
Sewman 27.03.2013 aktualisiert um 12:28:42 Uhr
Goto Top
Danke dir, aber bekomme folgende Fehlermeldung von der PowerShell, oder gilt das nicht für die PS?

The term '>>' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling
of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:3

back-to-top>> <<<< c:\temp\PremSet.log icacls.exe C.Temp\Test\ /T /C /grant ads.test.de\A-testFMgmt:F

+ CategoryInfo : ObjectNotFound: (>>:String) , CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
bastla
bastla 27.03.2013 um 12:32:09 Uhr
Goto Top
Hallo Sewman!

Das ist, so wie alle anderen Code-Beispiele in diesem Thread, Batch (CMD) ...

Grüße
bastla
Sewman
Sewman 27.03.2013 um 12:42:26 Uhr
Goto Top
hehe danke dir.

Kaum macht mans richtig ;)
Sewman
Sewman 10.04.2013 aktualisiert um 10:39:49 Uhr
Goto Top
Hi,

Muss nochmal nachhaken.

Gibt es auch eine Möglichkeit im Logfile nur die Fehler abzuspeichern?

Gruß
Sew

Edit: Hab es selbst rausgefunden.

Für die Nachwelt: einfach statt >> , 2>> nehmen