schaefff
Goto Top

Ordnernamen auslesen für Besitzerwechsel

Moin alle zusammen,

hoffe hier kann mir jemand helfen.
Die Suche hat mir nur bedingt geholfen.

Es geht um folgendes Problem:
Ich habe hier ein Produktionsserver (Server 2003 R2 x64)auf dem 30 Mann arbeiten und alle haben einen eigenen Ordner auf dem sie per Netzwerkfreigabe arbeiten. Die Ordnerbezeichnungen entsprechen ihren Benutzernamen. (Alles in einer Domäne)
Also Benutzer ist z.B. user1234, also heisst der Ordner user1234.

Nun werden aber täglich nachts Dateien in die Ordner aktualisiert um sie auf dem neuesten Stand zu halten. Problem dabei ist, dass die Kontigente, die den Usern zugewiesen sind, dadurch verfälscht werden, unter anderem auch wenn Kollegen anderen Kollegen was in ihre Ordner kopieren.

Also habe ich folgendes Script ausprobiert mit der subinacl.exe aus dem Windows Resource Kit:

Code:

subinacl /file E:\Produktionsordner\user1234 /setowner=domäne.de\user1234
subinacl /subdirec E:\Produktionsordner\user1234\*.* /setowner=domäne.de\user1234

Funktioniert auch alles wunderbar per Batch.
ABER das ist sehr unsauber und wartungsaufwendig. Sprich ich muss jeden einzelnen User händisch in die Batch aufnehmen und jedes Mal wenn ein Kollege die Firma verlässt oder hinzukommt, muss die Batch ergänzt werden. Da hat bei uns leider keiner die Zeit für, da täglich pro Server bis zu 20 Scripts laufen. Und wenn man jedes anpassen müsste... na ja. Viel Spaß


Also meine Frage wäre:

Kann man irgendwie in der Batch die Ordnernamen auslesen lassen und diesen dann anstelle des Benutzers setzen? Und das Ganze als Schleife, bis alle Ordner in dem Produktionsordner abgearbeitet sind?

Versteht ihr was ich meine? Will das halt nicht so unsauber laufen lassen.
Kann mir da jemand auf die Sprünge helfen? Bin nicht gerade der Scriptgott. Ich suche natürlich parallel im Netz nach Möglichkeiten, aber es kann ja sein, dass jemand schonmal die Problematik hatte.


Danke und viele Grüße
schaefff

Content-Key: 147414

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

Printed on: April 20, 2024 at 04:04 o'clock

Member: Miyamoto
Miyamoto Jul 22, 2010 at 08:59:31 (UTC)
Goto Top
Hi,
was du meinst ist glaube ich das

@ECHO OFF

SET pfad=E:\Produktionsordner

for /f %%i IN ('dir /B /O:N %pfad%') do (  

	subinacl /file %pfad%\%%i /setowner=domäne.de\%%i
	subinacl /subdirec %pfad%\%%i\*.* /setowner=domäne.de\%%i
	
)

Gruß Miyamoto

ps: es ist ungetestet
Member: mc-doubleyou
mc-doubleyou Jul 22, 2010 at 09:00:22 (UTC)
Goto Top
Hallo,

an und für sich müsstet du da mit Variablen weiter kommen bzw müsst es auch möglich sein den gesamten Produktionsordner zu wählen also jeder Ordner in diesem Ordner.

mc-doubleyou
Member: bastla
bastla Jul 22, 2010 at 09:08:22 (UTC)
Goto Top
Willkommen im Forum, schaefff!

@Miyamoto
Da es ja nur um Ordner gehen soll, böte sich (genauso ungetestet face-wink) eher "for /d" (oder zumindest ein"/ad" im "dir"-Befehl) an:
@ECHO OFF & setlocal
SET pfad=E:\Produktionsordner
for /d %%i IN ("%pfad%\*.*") do (  

	subinacl /file "%%i" /setowner="domäne.de\%%~nxi"  
	subinacl /subdirec "%%i\*.*" /setowner="domäne.de\%%~nxi"  
	
)
Grüße
bastla
Member: schaefff
schaefff Jul 22, 2010 at 09:25:22 (UTC)
Goto Top
Hallo,

danke für die schnelle Resonanz. Super! face-smile

Werde mich mal gleich ans Testen machen. Muss nur kurz ne kleine Testumgebung schaffen, denn wenn ich Mist mach, können 30 Mann nicht arbeiten. face-wink
Ich gebe dann bescheid inwieweit das funktioniert hat.

Vielen Dank schonmal.

Grüße
schaefff
Member: schaefff
schaefff Jul 22, 2010 at 12:31:22 (UTC)
Goto Top
Hi nochmals,

funktionieren beide Varianten problemlos und schnell. Danke dafür nochmal!
Ohne jetzt jemanden zu nahe treten zu wollen, aber welche wäre die bessere Variante? face-smile

Egal?

Grüße
schaefff
Member: schaefff
schaefff Jul 23, 2010 at 13:54:37 (UTC)
Goto Top
Moin alle zusammen,

eine Frage habe ich noch:

Die batch funktioniert ohne Probleme, nun möchte ich aber eine Logfunktion implementieren.
Dazu möchte ich gerne wissen, ob es möglich ist in der batch eine Abfrage ins AD zu erlauben, die checkt ob der User überhaupt existiert.
weil wenn ein Ordner System heisst, und der User "System" im AD nicht existiert, soll ein Fehler ins Log geschrieben werden,
genau wie, wenn die Datei noch offen ist und die Besitzrechte nicht geändert werden konnten.

Soweit so gut:

@echo off & setlocal
echo Startzeit %DATE% - %time% >> C:\Produktionsordner\_LOG\copy.log

SET pfad=C:\Produktionsordner

for /d %%i IN ("%pfad%\*.*") do (

subinacl /file "%%i" /setowner="domäne.de\%%~nxi"
subinacl /subdirec "%%i\*.*" /setowner="domäne.de\%%~nxi"

HIER MÜSSTE DIE ABFRAGE HIN UND WENN NEGATIV -> ERRORLEVEL 1

if errorlevel 0 echo [OK] - Besitzer für Verzeichnis %%i auf Benutzer %%~nxi erfolgreich geändert >> C:\Produktionsordner\_LOG\copy.log
if errorlevel 1 echo [FEHLER] - Besitzer für Verzeichnis %%i konnte nicht auf Benutzer %%~nxi geändert werden >>C:\Produktionsordner\_LOG\copy.log

)
echo Endzeit %DATE% - %time% >> C:\Produktionsordner\_LOG\copy.log


Wisst ihr zufällig wie ich das anstellen kann?

Danke

Viele Grüße
schaefff