Besitzer von Ordnern mit VB-Script auslesen
da die Frage vor ein paar Tagen auftauchte und ich auch keine Lösung gefunden habe...
Hallo!
Problem:
Alle Ordner in einem Unterordner und deren Besitzer sollen in ein Excel-File ausgegeben werden
siehe hier
Hier meine Lösung:
Das Ding besteht aus 2 Dateien (besser gings auf die schnelle nicht...)
1.) ordner.vbs:
2.) besitzer.cmd
Diese Lösung hat allerdings 2 Bugs:
1.) Sie funktioniert nicht, wenn der Überordner ein Leerzeichen enthält wie zB Dokumente und Einstellungen
2.) Der schlimmere Fehler:
Er liest alle Berechtigungen aus, nur nicht den Besitzer...
FALLS JEMAND HELFEN KANN: BITTE DARUM!
Danke
Hallo!
Problem:
Alle Ordner in einem Unterordner und deren Besitzer sollen in ein Excel-File ausgegeben werden
siehe hier
Hier meine Lösung:
Das Ding besteht aus 2 Dateien (besser gings auf die schnelle nicht...)
1.) ordner.vbs:
ordner = "Z:\2009_2010"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f1 = fs.GetFolder(ordner)
for each unterordner in f1.subfolders
listunter = listunter & unterordner & vbcrlf
Set WshShell = WScript.CreateObject("WScript.Shell")
ret = WshShell.Run ("besitzer.cmd " & ordner)
Set File = fs.OpenTextFile("temp.txt" , 1, true)
' Datei zum Lesen öffnen
Do While not file.AtEndOfStream
besitzer = besitzer & file.ReadLine
Loop
listunter = listunter & besitzer & vbcrlf
next
SET objfs= createobject("scripting.filesystemobject")
strdateiname = "Ordnerliste.csv"
set objtextstream = objfs.createtextfile(strdateiname, True)
strwritestring = listunter
objtextstream.write strwritestring
objtextstream.close
set objtextstream = nothing
set objfs = nothing
echo J | cacls %1 > temp.txt
Diese Lösung hat allerdings 2 Bugs:
1.) Sie funktioniert nicht, wenn der Überordner ein Leerzeichen enthält wie zB Dokumente und Einstellungen
2.) Der schlimmere Fehler:
Er liest alle Berechtigungen aus, nur nicht den Besitzer...
FALLS JEMAND HELFEN KANN: BITTE DARUM!
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134881
Url: https://administrator.de/contentid/134881
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
30 Kommentare
Neuester Kommentar
Schau mal dort : http://www.indented.co.uk/index.php/2009/02/19/reading-ntfs-and-share-s ...
das sollte Dich auf die richtige Spur setzen (suche einfach nach Owner)
Falls Du es zusammenkriegst, könntest Du ja das Ergebnis posten
das sollte Dich auf die richtige Spur setzen (suche einfach nach Owner)
Falls Du es zusammenkriegst, könntest Du ja das Ergebnis posten
... ansonsten als Abwandlung Deines Ansatzes mit Verwendung einer CMD-Zeile:
BTW: Weshalb soll es denn VBS sein? Unter CMD wäre es eine (zugegeben etwas längere ) Zeile (hier zum Testen als Version für die Direkteingabe an der Kommandozeile):
oder (etwas "transparenter") als Batch:
Grüße
bastla
ordner = "Z:\2009_2010"
Liste = "Z:\Ordnerliste.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f1 = fs.GetFolder(ordner)
If fs.FileExists(Liste) Then fs.DeleteFile(Liste)
Set WshShell = CreateObject("WScript.Shell")
For Each unterordner In f1.Subfolders
listunter = listunter & unterordner & vbcrlf
CMD = "cmd /c for /f ""skip=7 tokens=4*"" %a in ('dir """ & unterordner & """/q^|findstr /v ""Datei(en) Verzeichnis(se)""') do @echo %a;%b"
besitzer = WshShell.Exec(CMD).StdOut.ReadAll
listunter = listunter & besitzer & vbcrlf
Next
fs.CreateTextFile(Liste).Write listunter
BTW: Weshalb soll es denn VBS sein? Unter CMD wäre es eine (zugegeben etwas längere ) Zeile (hier zum Testen als Version für die Direkteingabe an der Kommandozeile):
for /d %i in ("Z:\2009_2010\*.*") do @(echo %i & @(for /f "skip=7 tokens=4*" %a in ('dir "%i"/q^|findstr /v "Datei(en) Verzeichnis(se)"') do @echo %a;%b) & @echo\)>>Ordnerliste.csv
@echo off & setlocal
set "Ordner=Z:\2009_2010"
set "Liste=Z:\Ordnerliste.csv"
del "%Liste%" 2>nul
for /d %%i in ("%Ordner%\*.*") do (
echo %%i
for /f "skip=7 tokens=4*" %%a in ('dir "%%i"/q^|findstr /v "Datei(en) Verzeichnis(se)"') do echo %%a;%%b
echo\
)>>"%Liste%"
bastla
Hallo urobe73!
Da bin ich dann wohl etwas über das Ziel hinausgeschossen und bei den Ordnerinhalten gelandet ...
Wenn es tatsächlich nur um die Unterordner einer Ebene geht, würde ich Dir dennoch die Batch-Variante aufdrängen wollen :
Im Prinzip wird dabei nur ein "
liefert eine Liste aller Ordner (wegen "
filtert alle Zeilen, welche die Strings "Datei(en)" oder "Verzeichnis(se)" enthalten (sollte nur auf die beiden letzten Zeilen zutreffen), aus dem Ergebnis heraus.
überspringt zum Einen die ersten 7 Zeilen (bis zur Zeile mit "..") und legt zum Anderen fest, dass nur die Spalten 4 (=Besitzer) und alles was danach kommt (=Ordnername mit beliebig vielen Leerzeichen) verwendet werden sollen. Als Trennzeichen zwischen den Spalten gelten defaultmäßig (und sind daher nicht angegeben) Leerzeichen und TAB - damit bleibt von zB
als %%a "DOMÄNE\User" und als %%b "Ein Test-Unterordner". Diese beiden Teile werden schließlich mittels
(durch ";" getrennt) in der gewünschten Reihenfolge an das Ende der Listendatei angefügt (wegen ">>" und nicht ">", weil Letzteres jedes Mal eine neue Datei erstellen und die bereits Vorhandene damit überschreiben würde).
Ein VBScript zum Aufruf dieses Batches hätte mE keinen Sinn, da nur der Name der Listendatei und der zu bearbeitende Ordner übergeben werden müssten - die Schleife für die "Subfolders" entfiele, da der "
Falls es dennoch Dein großer Wunsch sein sollte, das Ganze in VBS "einzukleiden", kann ich das natürlich noch nachreichen ...
... aber dann wäre es ja gleich besser, den Vorschlag von AndreasBrecht aufzugreifen ...
Grüße
bastla
[Edit] Wenn übrigens die gesamte Unterordnerstruktur abgegrast werden sollte, wäre der Batch nur unwesentlich länger:
[/Edit]
Da bin ich dann wohl etwas über das Ziel hinausgeschossen und bei den Ordnerinhalten gelandet ...
Wenn es tatsächlich nur um die Unterordner einer Ebene geht, würde ich Dir dennoch die Batch-Variante aufdrängen wollen :
@echo off & setlocal
set "Ordner=Z:\2009_2010"
set "Liste=Z:\Ordnerliste.csv"
del "%Liste%" 2>nul
for /f "skip=7 tokens=4*" %%a in ('dir "%Ordner%" /ad /q^|findstr /v "Datei(en) Verzeichnis(se)"') do echo %%b;%%a>>"%Liste%"
dir
"-Befehl verwendet und dessen Ausgabe durch das Weglassen der ersten 7 und der letzten beiden Zeilen sowie das Reduzieren auf die relevanten Spalten "behübscht" - konkret:dir "%Ordner%" /ad /q
/ad
") in "Z:\2009_2010" und gibt zusätzlich zu den "üblichen" Informationen Datum, Zeit und "<DIR>" als Kennzeichen eines Ordners auch den Besitzer an.findstr /v "Datei(en) Verzeichnis(se)"
for /f "skip=7 tokens=4*" %a
31.01.2010 15:49 <DIR> DOMÄNE\User Ein Test-Unterordner
echo %%b;%%a>>"%Liste%"
Ein VBScript zum Aufruf dieses Batches hätte mE keinen Sinn, da nur der Name der Listendatei und der zu bearbeitende Ordner übergeben werden müssten - die Schleife für die "Subfolders" entfiele, da der "
dir
"-Befehl dies gleich mit erledigt, und auch das Schreiben in die Datei geht in CMD sehr einfach.Falls es dennoch Dein großer Wunsch sein sollte, das Ganze in VBS "einzukleiden", kann ich das natürlich noch nachreichen ...
... aber dann wäre es ja gleich besser, den Vorschlag von AndreasBrecht aufzugreifen ...
Grüße
bastla
[Edit] Wenn übrigens die gesamte Unterordnerstruktur abgegrast werden sollte, wäre der Batch nur unwesentlich länger:
@echo off & setlocal
set "Ordner=Z:\2009_2010"
set "Liste=Z:\Ordnerliste.csv"
del "%Liste%" 2>nul
for /r "%Ordner%" %%i in (.) do for /f "skip=7 tokens=4*" %%a in ('dir "%%i" /ad /q^|findstr /v "Datei(en) Verzeichnis(se)"') do echo %%~fi\%%b;%%a>>"%Liste%"
@AndreasBrecht
Grüße
bastla
... könntest Du ja das Ergebnis posten
Auch wenn ich nicht direkt angesprochen war :Ordner = "Z:\2009_2010"
Liste = "Z:\Ordnerliste.csv"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(Liste) Then fso.DeleteFile(Liste)
Set objWMI = GetObject("winmgmts://./root/cimv2")
For Each Unterordner In fso.GetFolder(ordner).Subfolders
objWMI.Get("Win32_LogicalFileSecuritySetting='" & Unterordner & "'").GetSecurityDescriptor objSD
Listunter = Listunter & vbCrLf & Unterordner.Name & ";" & objSD.Owner.Domain & "\" & objSD.Owner.Name
Next
fso.CreateTextFile(Liste).Write Mid(Listunter, 3)
bastla
Hallo urobe73!
Gib bitte folgenden Befehl an der Kommandozeile ein
und poste (unter Verwendung von ) aus der entstandenen Datei "Z:\Inhalt.txt" die Zeile mit "!skichallenge" ...
Übrigens: Welches BS verwendest Du?
Die rekursive VBS-Variante könnte etwa so aussehen:
Voraussetzung ist dabei natürlich, dass das Script mit den erforderlichen Berechtigungen ausgeführt wird.
Grüße
bastla
Gib bitte folgenden Befehl an der Kommandozeile ein
dir /ad /q Z:\2009_2010\000kiri>Z:\Inhalt.txt
Übrigens: Welches BS verwendest Du?
Die rekursive VBS-Variante könnte etwa so aussehen:
StartOrdner = "Z:\2009_2010"
Liste = "Z:\Ordnerliste.csv"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(Liste) Then fso.DeleteFile(Liste)
Set objWMI = GetObject("winmgmts://./root/cimv2")
Listunter = ""
BearbeiteUnterordner fso.GetFolder(StartOrdner)
fso.CreateTextFile(Liste).Write Mid(Listunter, 3)
Sub BearbeiteUnterordner(Ordner)
For Each Unterordner In Ordner.Subfolders
objWMI.Get("Win32_LogicalFileSecuritySetting='" & Unterordner.Path & "'").GetSecurityDescriptor objSD
Listunter = Listunter & vbCrLf & Unterordner.Path & ";" & objSD.Owner.Domain & "\" & objSD.Owner.Name
BearbeiteUnterordner Unterordner
Next
End Sub
Grüße
bastla
Hallo urobe73!
Ich hatte mit XP getestet und die oben dargestellte Form der Ausgabe
erhalten - dadurch war die Zerlegung problemlos möglich ...
Ein Server2003 liefert zB
- hier müsste (wegen des langen Besitzernamens) schon an der Spaltenposition 63 (was sich auch realisieren ließe) getrennt werden.
Wenn allerdings im Vergleich dazu
überhaupt keinen Ordnernamen mehr liefert, kann das leider mit der Batch-Version nicht klappen ...
Grüße
bastla
P.S.: Jetzt habe ich leider wirklich nicht mehr Zeit
Ich hatte mit XP getestet und die oben dargestellte Form der Ausgabe
31.01.2010 15:49 <DIR> DOMÄNE\User Ein Test-Unterordner
Ein Server2003 liefert zB
26.10.2009 10:12 <DIR> VORDEFINIERT\AdministraConf
Wenn allerdings im Vergleich dazu
27.01.2010 13:34 <DIR> VORDEFINIERT\Administra..
Grüße
bastla
P.S.: Jetzt habe ich leider wirklich nicht mehr Zeit
hallo an alle,
ich war der erzeuger des ursprünglichen beitrages.
mein ziel war es eigentlich die berechtigungen mit icacls von ordnerstrukturen in eine textdatei zu bekommen.
der befehl icacls gibt schon das richtige format aus, nur das er auch alle inhalte mit ausgibt, was bei einigen tausend dateien recht unübersichtlich wird.
Die Ausgabe sieht dann so aus:
Wie man sieht mit den enthaltenen Dateien.
Ich will das ganze auch nicht weiterverarbeiten, deshalb reicht mir ein Textdatei. ist eine reine dokumentation.
es hätte ja sein können das jemand ein tool kennt das genau diese aufgabe erfüllt.
schade das icacls keinen schalter dafür hat.
aber trotzdem danke für die hier geposteten code. kann man immer gebrauchen.
..und was den bastla angeht...echt der hammer. der kennt für jede aufgabe nen cmd schnipsel
da bin ich schon etwas neidisch, wäre froh wenn ich so 'nen draht und verständniss dafür hätte.
gruss 010101
ich war der erzeuger des ursprünglichen beitrages.
mein ziel war es eigentlich die berechtigungen mit icacls von ordnerstrukturen in eine textdatei zu bekommen.
der befehl icacls gibt schon das richtige format aus, nur das er auch alle inhalte mit ausgibt, was bei einigen tausend dateien recht unübersichtlich wird.
Die Ausgabe sieht dann so aus:
D:\Downloads\Tesst\ BUILTIN\Users: (OI)(CI)(M)
meinPC\benutzer1: (OI)(CI)(F)
BUILTIN\Administrators: (I)(F)
BUILTIN\Administrators: (I)(OI)(CI)(IO)(F)
NT AUTHORITY\SYSTEM: (I)(F)
NT AUTHORITY\SYSTEM: (I)(OI)(CI)(IO)(F)
NT AUTHORITY\Authenticated Users: (I)(M)
NT AUTHORITY\Authenticated Users: (I)(OI)(CI)(IO)(M)
BUILTIN\Users: (I)(RX)
BUILTIN\Users: (I)(OI)(CI)(IO)(GR,GE)
D:\Downloads\Tesst\blahblub BUILTIN\Users: (I)(OI)(CI)(M)
meinPC\benutzer1: (I)(OI)(CI)(F)
BUILTIN\Administrators: (I)(F)
BUILTIN\Administrators: (I)(OI)(CI)(IO)(F)
NT AUTHORITY\SYSTEM: (I)(F)
NT AUTHORITY\SYSTEM: (I)(OI)(CI)(IO)(F)
NT AUTHORITY\Authenticated Users: (I)(M)
NT AUTHORITY\Authenticated Users: (I)(OI)(CI)(IO)(M)
BUILTIN\Users: (I)(OI)(CI)(IO)(GR,GE)
D:\Downloads\Tesst\test2.rar BUILTIN\Users: (I)(M)
meinPC\benutzer1: (I)(F)
BUILTIN\Administrators: (I)(F)
NT AUTHORITY\SYSTEM: (I)(F)
NT AUTHORITY\Authenticated Users: (I)(M)
D:\Downloads\Tesst\testdatei.txt BUILTIN\Users: (I)(M)
meinPC\benutzer1: (I)(F)
BUILTIN\Administrators: (I)(F)
NT AUTHORITY\SYSTEM: (I)(F)
NT AUTHORITY\Authenticated Users: (I)(M)
D:\Downloads\Tesst\blahblub\sdgsdfg NT AUTHORITY\Authenticated Users: (OI)(CI)(M)
NT AUTHORITY\SYSTEM: (OI)(CI)(F)
meinPC\benutzer1: (OI)(CI)(RX)
BUILTIN\Administrators: (OI)(CI)(F)
BUILTIN\Users: (CI)(RX)
Ich will das ganze auch nicht weiterverarbeiten, deshalb reicht mir ein Textdatei. ist eine reine dokumentation.
es hätte ja sein können das jemand ein tool kennt das genau diese aufgabe erfüllt.
schade das icacls keinen schalter dafür hat.
aber trotzdem danke für die hier geposteten code. kann man immer gebrauchen.
..und was den bastla angeht...echt der hammer. der kennt für jede aufgabe nen cmd schnipsel
da bin ich schon etwas neidisch, wäre froh wenn ich so 'nen draht und verständniss dafür hätte.
gruss 010101
Hallo urobe73!
So - jetzt bin ich hoffentlich etwas konzentrierter als am Vormittag ...
Noch ein Versuch mit Batch:
Damit das wie gewünscht funktionieren kann, müsste allerdings bei Dir die oben besprochene Zeile
so aussehen:
da hier zeichenweise (Name = alles nach den ersten 23 Zeichen, Besitzer = erste 23 Zeichen des 4. Tokens - also im Beispiel: "DOMAIN\Thomas.BOEH !skichallenge") aufgeteilt wird.
Umlaute sollten inzwischen auch vernünftig dargestellt werden.
Hinsichtlich der VBS-Variante habe ichnoch nicht vermutlich herausgefunden, wodurch der beschriebene Fehler ausgelöst wird - einen Verdacht habe ich allerdings: Könnte es sein, dass ein Ordnername ein Apostroph enthält? Falls ja, versuch es zwischenzeitlich damit:
Da jetzt sofort in die Ausgabedatei geschrieben wird, lässt sich auch nachvollziehen, welches der letzte ordnungsgemäß verarbeitete Ordner war.
Übrigens:
in den benachbarten Ordner, ohne wissen zu müssen, wo sich die gesamte Ordnerstruktur befindet (bzw wie der übergeordnete Ordner heißt) - typische Anwendung etwa bei Websites ...
Grüße
bastla
So - jetzt bin ich hoffentlich etwas konzentrierter als am Vormittag ...
Noch ein Versuch mit Batch:
@echo off & setlocal
set "Ordner=Z:\2009_2010"
set "Liste=Z:\Ordnerliste.csv"
for /f "tokens=3 delims=:. " %%i in ('chcp 1252') do set "CP=%%i"
del "%Liste%" 2>nul
for /r "%Ordner%" %%i in (.) do for /f "skip=7 tokens=3*" %%a in ('dir "%%i" /ad /q^|findstr /v "Datei(en) Verzeichnis(se)"') do set "Info=%%b" & call :ProcessDir "%%~fi"
chcp %CP%>nul
goto :eof
:ProcessDir
>>"%Liste%" echo "%~1\%Info:~23%";%Info:~,23%
goto :eof
20.01.2010 13:09 <DIR> DOMAIN\Thomas.BOEH!skichallenge
20.01.2010 13:09 <DIR> DOMAIN\Thomas.BOEH !skichallenge
Umlaute sollten inzwischen auch vernünftig dargestellt werden.
Hinsichtlich der VBS-Variante habe ich
StartOrdner = "Z:\2009_2010"
Liste = "Z:\Ordnerliste.csv"
Set fso = CreateObject("Scripting.FileSystemObject")
Set objWMI = GetObject("winmgmts://./root/cimv2")
Set Liste = fso.CreateTextFile(Liste)
On Error Resume Next
BearbeiteUnterordner fso.GetFolder(StartOrdner)
Liste.Close
Sub BearbeiteUnterordner(Ordner)
For Each Unterordner In Ordner.Subfolders
objWMI.Get("Win32_LogicalFileSecuritySetting=""" & Replace(Unterordner.Path, "\", "\\") & """").GetSecurityDescriptor objSD
Liste.WriteLine Unterordner.Path & ";" & objSD.Owner.Domain & "\" & objSD.Owner.Name
BearbeiteUnterordner Unterordner
Next
End Sub
Übrigens:
die 2. Zeile zeigt "was weis ich was"
Mit ".." ist immer der übergeordnete Ordner gemeint; sehr nützlich bei relativen Pfadangaben - so kommst Du zB mitcd ..\Nachbar
Grüße
bastla
@ 010101
Eigentlich kenne ich nur so 3 bis 4 CMD-Schnipsel (und so gut wie alle davon hier aus dem Forum, besonders aus Bibers Kommentaren) - aber damit lässt sich gelegentlich schon was anfangen ...
Für Deine Zielsetzung könnte vielleicht AccessEnum das richtige Werkzeug sein ...
Grüße
bastla
Eigentlich kenne ich nur so 3 bis 4 CMD-Schnipsel (und so gut wie alle davon hier aus dem Forum, besonders aus Bibers Kommentaren) - aber damit lässt sich gelegentlich schon was anfangen ...
Für Deine Zielsetzung könnte vielleicht AccessEnum das richtige Werkzeug sein ...
Grüße
bastla
Zitat von @Edi.Pfisterer:
@010101
Verwende den vb-code von "bastla". Der erzeugt Dir genau die Lösung für die von Dir beschriebene Anforderung.
Zeile 1 und 2 entsprechend ändern, als vbs speichern und fertig!
DANKE an Euch - für die Anregung und für die Hilfe!!!
@010101
Verwende den vb-code von "bastla". Der erzeugt Dir genau die Lösung für die von Dir beschriebene Anforderung.
Zeile 1 und 2 entsprechend ändern, als vbs speichern und fertig!
DANKE an Euch - für die Anregung und für die Hilfe!!!
hi,
nee tut es nicht. es werden zwar nur die ordner aufgelistet, aber keine berechtigungen.
mir ging es vorallem darum die vorhandenen berechtigungen zu dokumentieren, nicht nur welcher benutzer oder gruppe zusätzlich zu den vererbten berechtigungen vorhanden sind.
das accessenum wirft auch nur aus, wer berechtigt ist, nicht aber welche berechtigung.
aber egal, danke für eure mühen und den nützlichen beitrag. der ein oder andere kann die hier geposteten code sicher für seine eigenen belange verwenden oder anpassen.
gruss 010101
Zitat von @bastla:
@echo off & setlocal
> set "Ordner=D:\Test"
> set "Liste=D:\Berechtigungen.txt"
>
> del "%Liste%" 2>nul
> for /r "%Ordner%" %%i in (.) do >>"%Liste%" cacls /c "%%i"
>
hallo bastla,
bin erst heute dazugekommen es mir anzuschauen.
vielen dank, das funktioniert. ich musste nur den cacls parameter und %%i tauschen, dann kommt genau das raus was ich brauche.
so sieht das ganze dann bei mir aus:
@echo off & setlocal
set "Ordner=D:\Test"
set "Liste=D:\Berechtigungen.txt"
if exist "%Liste%" del "%Liste%" >nul
for /r "%Ordner%" %%i in (.) do >>"%Liste%" cacls "%%i" /c
endlocal
gruss 010101
Hallo 01-01-01!
Freut mich, dass es passt ...
Das "
Grüße
bastla
Freut mich, dass es passt ...
ich musste nur den cacls parameter und %%i tauschen
Ja, das habe ich beim Posten verschlimmbessert (ursprünglich war das "/c
" gar nicht dabei; nachdem ich noch einen (zu) kurzen Blick auf Deinen ursprünglichen Beitrag geworfen hatte, habe ich es dann - der Ordnung halber, aber an der falschen Position - hinzugefügt) Das "
endlocal
" kannst Du übrigens einsparen, da es automatisch am Ende eines Batches ausgeführt wird ....Grüße
bastla
Muss das Thema nochmals aufgreifen.
Das letzte Skript funktioniert zwar, liest aber effektiv nur die Sicherheits Gruppen und Benutzernamen aus, die
dem Ordner zugeordnet sind.
Wenn ich im Explorer (Windows 7) den Besitzer (Owner) als Spalte im Explorer hinzufüge, bekomme ich
dann direkt neben dem Ordner oder der Datei die Domäne\UserID angezeigt.
Genau das würde ich gerne rekursiv auslesen.
Am liebsten per VBS.
Wer kann helfen?
Gruß
Thomas
Das letzte Skript funktioniert zwar, liest aber effektiv nur die Sicherheits Gruppen und Benutzernamen aus, die
dem Ordner zugeordnet sind.
Wenn ich im Explorer (Windows 7) den Besitzer (Owner) als Spalte im Explorer hinzufüge, bekomme ich
dann direkt neben dem Ordner oder der Datei die Domäne\UserID angezeigt.
Genau das würde ich gerne rekursiv auslesen.
Am liebsten per VBS.
Wer kann helfen?
Gruß
Thomas
Hallo thl1966!
Grüße
bastla
... Domäne\UserID angezeigt.
Genau das würde ich gerne rekursiv auslesen.
Genau das sollte doch eigentlich der (VBS-)Ansatz da oben machen ...Genau das würde ich gerne rekursiv auslesen.
Grüße
bastla
Hallo , habe heute das gute Stück hier gefunden und bin schon froh überhaupt etwas gefunden zu haben ^^
Ich bin leider nicht so vertraut mit der Benutzung von batch Dateien.
Ich habe ein kleines Problem - unzwar versuche ich deinen Code so zu bearbeiten, dass gewisse Strings nicht in die Textdatei geschrieben, sondern vorher gekürzt werden.
Momentan sieht die Textdatei so aus:
C:\Temp Domain\userID: (OI)(CI)C
NT-AUTORITŽT\Authentifizierte Benutzer: (OI)(CI)(ID)C
NT-AUTORITŽT\SYSTEM: (OI)(CI)(ID)F
VORDEFINIERT\Administrators: (OI)(CI)(ID)F
Domain\userID: (OI)(CI)(ID)C
VORDEFINIERT\Users: (OI)(CI)(ID)R
Ich würde aber gerne nur folgendes in der Textdatei stehen haben:
userID: (OI)(CI)C
Dementsprechend soll bei mehreren Usern (bzw. Ordnern) folgendes stehen:
user1ID: (OI)(CI)C
user2ID: (OI)(CI)F
user3ID: (OI)(CI)C
Habe weiter oben gelesen, dass man das anscheinend mit dem "findstr" Befehl machen kann, aber egal wie ich das breche und biege ich steige nicht dahinter, wie das funktionieren könnte
Hat vlt. jemand eine Idee ?
Gruß Kevin
Ich bin leider nicht so vertraut mit der Benutzung von batch Dateien.
> @echo off & setlocal
> set "Ordner=D:\Test"
> set "Liste=D:\Berechtigungen.txt"
> if exist "%Liste%" del "%Liste%" >nul
> for /r "%Ordner%" %%i in (.) do >>"%Liste%" cacls "%%i" /c
> endlocal
>
Ich habe ein kleines Problem - unzwar versuche ich deinen Code so zu bearbeiten, dass gewisse Strings nicht in die Textdatei geschrieben, sondern vorher gekürzt werden.
Momentan sieht die Textdatei so aus:
C:\Temp Domain\userID: (OI)(CI)C
NT-AUTORITŽT\Authentifizierte Benutzer: (OI)(CI)(ID)C
NT-AUTORITŽT\SYSTEM: (OI)(CI)(ID)F
VORDEFINIERT\Administrators: (OI)(CI)(ID)F
Domain\userID: (OI)(CI)(ID)C
VORDEFINIERT\Users: (OI)(CI)(ID)R
Ich würde aber gerne nur folgendes in der Textdatei stehen haben:
userID: (OI)(CI)C
Dementsprechend soll bei mehreren Usern (bzw. Ordnern) folgendes stehen:
user1ID: (OI)(CI)C
user2ID: (OI)(CI)F
user3ID: (OI)(CI)C
Habe weiter oben gelesen, dass man das anscheinend mit dem "findstr" Befehl machen kann, aber egal wie ich das breche und biege ich steige nicht dahinter, wie das funktionieren könnte
Hat vlt. jemand eine Idee ?
Gruß Kevin
Hallo Snapst und willkommen im Forum!
Versuch es so (ungetestet):
Grüße
bastla
Versuch es so (ungetestet):
@echo off & setlocal
set "Ordner=D:\Test"
set "Liste=D:\Berechtigungen.txt"
if exist "%Liste%" del "%Liste%" >nul
for /r "%Ordner%" %%i in (.) do (
for /f "tokens=1* delims=\" %%a in ('cacls "%%i" /c|findstr /v "NT-AUTORI VORDEFINIERT"') do >>"%Liste%" echo %%b
)
bastla
Vielen Dank für die schnelle Antwort. Ich musste bei dir nur noch ein '^' setzen und es funktioniert
(nur "|findstr" hat dazu geführt, dass keine Liste erstellt wurde. Aber du sagtest ja "ungetestet")
Danke sehr...
@echo off & setlocal
set "Ordner=D:\Test"
set "Liste=D:\Berechtigungen.txt"
if exist "%Liste%" del "%Liste%" >nul
for /r "%Ordner%" %%i in (.) do (for /f "tokens=1* delims=\" %%a in ('cacls "%%i" /c ^|findstr /v
"NT-AUTORI VORDEFINIERT') do >>"%Liste%" echo %%b
)
(nur "|findstr" hat dazu geführt, dass keine Liste erstellt wurde. Aber du sagtest ja "ungetestet")
Danke sehr...
Guten Morgen,
ich hätte da noch einmal eine kleine Frage
der Code oben:
sorgt ja dafür, dass ALLE Unterordner des angegebenen Pfades durchsucht und aufgelistet werden. Gibt es eine Möglichkeit dies auf eine bestimme Ebene zu beschränken ?
Das heißt (als kleines Beispiel):
Laufwerk D:\ enthält die Ordner "Software" und "Hardware".
Unter D:\Software\ gibt es die Unterordner "Office" und "Tools".
Office und Tools enthalten weitere Ordner.
Ich frage mich jetzt, ob es mit Abänderung des obigen Codes möglich ist, nur bis zur Ebene D:\Software\ auszulesen ?
Also die Berechtigungen für D:\Software\Tools und D:\Software\Office abzufragen, aber nicht die der Unterordner von Tools und Office.
Hoffe das war verständlich ^^
Viele Grüße
Snapst
ich hätte da noch einmal eine kleine Frage
der Code oben:
@echo off & setlocal
set "Ordner=D:\Test"
set "Liste=D:\Berechtigungen.txt"
if exist "%Liste%" del "%Liste%" >nul
for /r "%Ordner%" %%i in (.) do (for /f "tokens=1* delims=\" %%a in ('cacls "%%i" /c ^|findstr /v
"NT-AUTORI VORDEFINIERT') do >>"%Liste%" echo %%b
sorgt ja dafür, dass ALLE Unterordner des angegebenen Pfades durchsucht und aufgelistet werden. Gibt es eine Möglichkeit dies auf eine bestimme Ebene zu beschränken ?
Das heißt (als kleines Beispiel):
Laufwerk D:\ enthält die Ordner "Software" und "Hardware".
Unter D:\Software\ gibt es die Unterordner "Office" und "Tools".
Office und Tools enthalten weitere Ordner.
Ich frage mich jetzt, ob es mit Abänderung des obigen Codes möglich ist, nur bis zur Ebene D:\Software\ auszulesen ?
Also die Berechtigungen für D:\Software\Tools und D:\Software\Office abzufragen, aber nicht die der Unterordner von Tools und Office.
Hoffe das war verständlich ^^
Viele Grüße
Snapst
Ich nehme mir mal heraus selbst einen Vorschlag zu posten ^^
Das erfüllt meine Zwecke wie ich gerade festgestellt habe. Fehlen nur kleine Anpassungen aber ansonsten für mich ausreichend.
Schönen Tag noch ;)
set startpath=l:\
For /f "skip=2 tokens=3,*" %%i in ('dir "%startpath%"^|findstr /C:DIR') do @for /f "skip=2 tokens=3,*" %%m in ('dir "%startpath%%%j"^|findstr /C:DIR') do echo %%j;%%n>>m:\test.txt
Das erfüllt meine Zwecke wie ich gerade festgestellt habe. Fehlen nur kleine Anpassungen aber ansonsten für mich ausreichend.
Schönen Tag noch ;)
Hallo zusammen
Der Thread ist schon etwas älter aber auch ich suche sowas,
Das mir nur die Berechtigungen von den Ordnern ausliest
leider funktioniert das Script, welches mit win10 als admin ausgeführt wird, bei mir nicht, :
@echo off & setlocal
set "Ordner=C:\"
set "Liste=C:\Temp\Berechtigungen.txt"
if exist "%Liste%" del "%Liste%" >nul
for /r "%Ordner%" %%i in (.) do (for /f "tokens=1* delims=\" %%a in ('cacls "%%i" /c ^|findstr /v
"NT-AUTORI VORDEFINIERT') do >>"%Liste%" echo %%b
die datei wurde als batch.bat gespeichert
was mache ich falsch ?
Der Thread ist schon etwas älter aber auch ich suche sowas,
Das mir nur die Berechtigungen von den Ordnern ausliest
leider funktioniert das Script, welches mit win10 als admin ausgeführt wird, bei mir nicht, :
@echo off & setlocal
set "Ordner=C:\"
set "Liste=C:\Temp\Berechtigungen.txt"
if exist "%Liste%" del "%Liste%" >nul
for /r "%Ordner%" %%i in (.) do (for /f "tokens=1* delims=\" %%a in ('cacls "%%i" /c ^|findstr /v
"NT-AUTORI VORDEFINIERT') do >>"%Liste%" echo %%b
die datei wurde als batch.bat gespeichert
was mache ich falsch ?