gelöst Benutzergruppen und Benutzer auslesen (oder verwalten) mit Batch-Datein
Hallo liebe Programmierer.
Ich mache im Moment ein Schülerpraktikum in Sachen Informatik und soll die Benutzer in den einzelnen Gruppen auslesen und auslesen in welchen Gruppen der Benutzer ist. Das alles mit Batch Dateien.
Hier mal schnell der Quelltext, den ich mir schon aus diesem Forum geholt habe:
Also er liest mir die Gruppen ohne Probleme aus, dennoch müsste ich noch die zugehörigen Benutzer auslesen lassen und dies dann alles wie folgt in eine .txt schreiben lassen:
Ich hoffe jemand weiß wie ich das Script umschreiben muss, dass es das macht.
Danke im Vorraus.
01.
rem @echo off &setlocal
02.
03.
REM Schritt 1) Variablen erstellen
04.
REM ===========================================================
05.
set server = Servername
06.
set gruppen="C:\Documents and Settings\Administrator\Desktop\groupu\New Folder\localgroups.txt"
07.
set gruppenliste="C:\Documents and Settings\Administrator\Desktop\groupu\New Folder\localgroups_listing.txt"
08.
set benutzer="C:\Documents and Settings\Administrator\Desktop\groupu\New Folder\user_output.txt"
09.
10.
REM Schritt 2) ggf alte Dateiausgaben löschen
11.
REM ===========================================================
12.
if exist %gruppen% del %gruppen%
13.
if exist %gruppenliste% del %gruppenliste%
14.
if exist %benutzer% del %benutzer%
15.
if exist %benutzer%.ini del %benutzer%.ini
16.
pause
17.
18.
REM Schritt 3) Localgroups auslesen
19.
REM ===========================================================
20.
net localgroup|find "*">%gruppen%
21.
for %%a in (%gruppen%) do (
22.
for /F "delims=* tokens=1 skip=2" %%i in ('find "*" %%a') do @echo %%i>%%~na.tfw>>%gruppenliste%)
23.
24.
REM Schritt 4a) Datei mit den unterschriebenen Localgroups sortieren
25.
REM ===========================================================
26.
sort %gruppenliste% /o %gruppen%
27.
28.
REM Schritt 5) Benutzergruppen mit User in Datei schreiben
29.
REM ===========================================================
30.
for /f "delims=*" %%i IN (%gruppen%) DO @echo "%%i" && net localgroup "%%i" >> %benutzer%
31.
find /v "Der Befehl" %benutzer% > %benutzer%.ini
32.
type %benutzer%.ini
33.
pause
Gruppenname, ersterUser, zweiterUser, ...
Ich hoffe jemand weiß wie ich das Script umschreiben muss, dass es das macht.
Danke im Vorraus.
23 Antworten
- LÖSUNG bastla schreibt am 26.03.2009 um 11:20:00 Uhr
- LÖSUNG 76976 schreibt am 26.03.2009 um 11:27:36 Uhr
- LÖSUNG bastla schreibt am 26.03.2009 um 11:59:08 Uhr
- LÖSUNG 76976 schreibt am 26.03.2009 um 12:36:29 Uhr
- LÖSUNG bastla schreibt am 26.03.2009 um 11:59:08 Uhr
- LÖSUNG 76976 schreibt am 26.03.2009 um 11:27:36 Uhr
- LÖSUNG 60730 schreibt am 26.03.2009 um 12:40:37 Uhr
- LÖSUNG 76976 schreibt am 26.03.2009 um 12:51:17 Uhr
- LÖSUNG 60730 schreibt am 26.03.2009 um 13:24:09 Uhr
- LÖSUNG 76976 schreibt am 26.03.2009 um 13:25:48 Uhr
- LÖSUNG 60730 schreibt am 26.03.2009 um 14:15:47 Uhr
- LÖSUNG bastla schreibt am 26.03.2009 um 14:17:56 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 07:55:32 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 08:16:48 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 08:46:00 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 08:49:31 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 08:52:20 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 12:15:04 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 12:48:09 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 13:44:07 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 15:10:05 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 16:47:21 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 17:03:03 Uhr
- LÖSUNG 76976 schreibt am 30.03.2009 um 07:58:13 Uhr
- LÖSUNG 76976 schreibt am 30.03.2009 um 10:39:38 Uhr
- LÖSUNG 76976 schreibt am 30.03.2009 um 07:58:13 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 17:03:03 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 16:47:21 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 15:10:05 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 13:44:07 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 12:48:09 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 12:15:04 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 08:52:20 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 08:49:31 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 08:46:00 Uhr
- LÖSUNG bastla schreibt am 27.03.2009 um 08:16:48 Uhr
- LÖSUNG 76976 schreibt am 27.03.2009 um 07:55:32 Uhr
- LÖSUNG 76976 schreibt am 26.03.2009 um 12:51:17 Uhr
LÖSUNG 26.03.2009 um 11:20 Uhr
Hallo Pepper-jk und willkommen im Forum!
Um Dir nicht die Chance zu nehmen, entsprechende eigene Leistung einfließen zu lassen, nur eine Darstellung (am Beispiel der Gruppe "Administratoren"), wie Du zu den einzelnen Benutzern kommst:
Grüße
bastla
Um Dir nicht die Chance zu nehmen, entsprechende eigene Leistung einfließen zu lassen, nur eine Darstellung (am Beispiel der Gruppe "Administratoren"), wie Du zu den einzelnen Benutzern kommst:
01.
for /f "skip=6 delims=" %%a in ('net localgroup "Administratoren"^|findstr /v /c:"Der Befehl"') do echo %%a
bastla
LÖSUNG 26.03.2009 um 11:27 Uhr
Danke Bastla
Jetzt muss ich ja nur noch ein bissel "basteln" um des bei jeder gruppe zu machen und das in ne txt schreiben zu lassen
DANKÖÖÖ SCHÖN
MfG Pepper
________________
EDIT:
Ich bin ein ziemlicher NOOB in Batch
Weiß wer wie man dem sagt, dass es die Namen der Gruppen aus den einzelnen Zeilen von der "localgroups_listing.txt" benutzt?
Wär nett wenn jemand eine Ahnung hat wie das geht und die auch am besten hier reinschreibt
Jetzt muss ich ja nur noch ein bissel "basteln" um des bei jeder gruppe zu machen und das in ne txt schreiben zu lassen
DANKÖÖÖ SCHÖN
MfG Pepper
________________
EDIT:
Ich bin ein ziemlicher NOOB in Batch
Weiß wer wie man dem sagt, dass es die Namen der Gruppen aus den einzelnen Zeilen von der "localgroups_listing.txt" benutzt?
Wär nett wenn jemand eine Ahnung hat wie das geht und die auch am besten hier reinschreibt
LÖSUNG 26.03.2009 um 11:59 Uhr
Hallo Pepper-jk!
Grüße
bastla
... die Namen der Gruppen aus den einzelnen Zeilen von der "localgroups_listing.txt"
Schau Dir dazu die Zeile 30 an (verwendet die in Zeile 26 sortierte Liste) ...Grüße
bastla
LÖSUNG 26.03.2009 um 12:36 Uhr
Hi Leute (Hi Bastla)
Ich hab den Script bissel geändert .. der is jetzt kürzer aber er macht immer noch net das, was ich will xD
Ich zeig ihn euch mal:
Natürlich weiß ich, dass er nur die Admins ausgiebt, aber net mal das macht er richtig. Er gibt dann in der zweiten Zeile (nach der ersten, wo "Administrators, Administrator" steht) "Administrators, The command completed successfully." aus. Wie kann ich das wegbekommen?
Und das mit der sortierten Liste, gehts das noch (, nach der Änderung)?
Und wenn ja wie? xD
MfG Pepper
P.S.: Ich bin zu faul selbst nachzudenken bzw. ich kanns net (hab ja selbst den Quelltext nur ausm Forum, das ganze mit %%a %%i un so kenn ich alles garnet :S)
Ich hab den Script bissel geändert .. der is jetzt kürzer aber er macht immer noch net das, was ich will xD
Ich zeig ihn euch mal:
REM Schritt 1) Variablen erstellen
REM set gruppen="C:\groupu\localgroup\localgroups.txt"
set benutzer="C:\groupu\localgroup\user_output.txt"
REM Schritt 2) ggf alte Dateiausgaben löschen
REM if exist %gruppen% del %gruppen%
if exist %benutzer% del %benutzer%
pause
REM Schritte 3), 4a) Localgroups auslesen und sortieren
REM for /f "delims=*" %%i in ('net localgroup^|find "*"^|sort') do >>%gruppen% echo %%i
REM Schritt 5) Benutzergruppen mit User in Datei schreiben
REM for /f "skip=6 delims=" %%a in ('net localgroup "Administrators"^|findstr /v /c:"Der Befehl"') do >>%benutzer% echo Administrators, %%a
pause
REM set gruppen="C:\groupu\localgroup\localgroups.txt"
set benutzer="C:\groupu\localgroup\user_output.txt"
REM Schritt 2) ggf alte Dateiausgaben löschen
REM if exist %gruppen% del %gruppen%
if exist %benutzer% del %benutzer%
pause
REM Schritte 3), 4a) Localgroups auslesen und sortieren
REM for /f "delims=*" %%i in ('net localgroup^|find "*"^|sort') do >>%gruppen% echo %%i
REM Schritt 5) Benutzergruppen mit User in Datei schreiben
REM for /f "skip=6 delims=" %%a in ('net localgroup "Administrators"^|findstr /v /c:"Der Befehl"') do >>%benutzer% echo Administrators, %%a
pause
Natürlich weiß ich, dass er nur die Admins ausgiebt, aber net mal das macht er richtig. Er gibt dann in der zweiten Zeile (nach der ersten, wo "Administrators, Administrator" steht) "Administrators, The command completed successfully." aus. Wie kann ich das wegbekommen?
Und das mit der sortierten Liste, gehts das noch (, nach der Änderung)?
Und wenn ja wie? xD
MfG Pepper
P.S.: Ich bin zu faul selbst nachzudenken bzw. ich kanns net (hab ja selbst den Quelltext nur ausm Forum, das ganze mit %%a %%i un so kenn ich alles garnet :S)
LÖSUNG 26.03.2009 um 12:40 Uhr
Servus und willkommen,
Wie man sieht, hält nichts länger als ein "provisorium"
editiere - unabhängig von deiner Frage - Zeilen 6 -8
aus z.B
Dazu dann überall wo nur "%benutzer%" steht - fügst du ein .txt dazu
Dann hast du nur noch in Zeile 14 aus
Gruß
Wie man sieht, hält nichts länger als ein "provisorium"
editiere - unabhängig von deiner Frage - Zeilen 6 -8
aus z.B
06. set gruppen="C:\Documents and Settings\Administrator\Desktop\groupu\New Folder\localgroups.txt"
wird 06. set gruppen="%userprofile%\Desktop\groupu\New Folder\localgroups"
Damit hast du zwei Fliegen mit einer Klappe erledigt, das Script wird nicht mehr auf einen Benutzer beschränkt und aus localgroups.txt.ini wird nur .iniDazu dann überall wo nur "%benutzer%" steht - fügst du ein .txt dazu
Dann hast du nur noch in Zeile 14 aus
if exist %benutzer% del %benutzer%
ein if exist %benutzer%.* del %benutzer%.*
zu ändern und Zeile 15 kann verschwinden.Gruß
LÖSUNG 26.03.2009 um 12:51 Uhr
Danke da hast du recht, aber ich wäre Trozdem dankbar wenn du dir mal mein neues Script anschauen würdest und dazu was sagst
MfG Pepper
MfG Pepper
LÖSUNG 26.03.2009 um 13:24 Uhr
Servus,
Gruß
P.S.: Ich bin zu faul selbst nachzudenken
naja und was darf ich dann zurückschreiben?do >>%benutzer% echo Administrators, %%a
Kann so nicht funktionieren, weder Bastla noch ein anderer hat in diesem oder einem anderen Zusammenhang jemals "so" eine Zeile gezimmert - geschweige denn veröffentlicht.Gruß
LÖSUNG 26.03.2009 um 13:25 Uhr
do >>%benutzer% echo Administrators, %%a
funkt ja .. es gibt aus:
Administrators, Administrator
Administrators, ...
Administrators, ...
also alle Admins
nur gibt er am ende noch mal "The Command ..." aus >_<
LÖSUNG 26.03.2009 um 14:15 Uhr
Zitat von 76976:
> do >>%benutzer% echo Administrators, %%a
funkt ja .. es gibt aus:
> Administrators, Administrator
> Administrators, ...
> do >>%benutzer% echo Administrators, %%a
funkt ja .. es gibt aus:
> Administrators, Administrator
> Administrators, ...
Aber wohin "funkt" er? In die Dosbox oder in die Datei?
also alle Admins
nur gibt er am ende noch mal "The Command ..." aus
>_<
"The Command" - im vorherigen Thread, war es ein deutsches System.
Von daher - wie müßte dann die Zeile geändert werden, die bastla am 26.03.2009 um 11:20:00 Uhr: geschrieben hat?
Gruß
LÖSUNG 26.03.2009 um 14:17 Uhr
Hallo Pepper-jk!
Vielleicht kannst Du ja eine Verbindung zwischen "The command ..." und meinem oben geposteten "Der Befehl" herstellen ...
@TimoBeil
Grüße
bastla
Vielleicht kannst Du ja eine Verbindung zwischen "The command ..." und meinem oben geposteten "Der Befehl" herstellen ...
@TimoBeil
do >>%benutzer% echo Administrators, %%a
ist ein weiteres (inzwischen von mir bevorzugt verwendetes) "Biber-Special" (what else? )Grüße
bastla
LÖSUNG 27.03.2009 um 07:55 Uhr
Wie eine Verbindung herstellen?
Ich hab erst gedacht der gibt das noch mal aus, weil "Der Befehl" da steht, aber ohne "Der Befehl" machter nix mehr
Im Prinzip geht es aber, dass man dem sagen kann dass er die Gruppen aus der txt beziehen soll und dann
ausgibt oder?
Net dass ich mich tot probiere an dem Script!
MfG Pepper
Ich hab erst gedacht der gibt das noch mal aus, weil "Der Befehl" da steht, aber ohne "Der Befehl" machter nix mehr
Im Prinzip geht es aber, dass man dem sagen kann dass er die Gruppen aus der txt beziehen soll und dann
Gruppenname, User1, User2, ...
ausgibt oder?
Net dass ich mich tot probiere an dem Script!
MfG Pepper
LÖSUNG 27.03.2009 um 08:16 Uhr
Hallo Pepper-jk!
Zu der angesprochenen Zeile: Wenn Du "findstr /?" an der Kommandozeile eingibst, solltest Du die Funktion des auf die Ausgabe von "net localgroup" angewandten
eigentlich nachvollziehen können.
Grüße
bastla
Im Prinzip geht es aber
... nicht nur im Prinzip. Zu der angesprochenen Zeile: Wenn Du "findstr /?" an der Kommandozeile eingibst, solltest Du die Funktion des auf die Ausgabe von "net localgroup" angewandten
findstr /v /c:"Der Befehl"
Grüße
bastla
LÖSUNG 27.03.2009 um 08:46 Uhr
Achso
also des
wie lol
also könnte ich mit dem
hab ich das richtig verstanden?
_____________________________________________________________________
EDIT:
geht net >_<
war klar dass ichs net hinbekomme ^^
also des
findstr
sucht nach den "Der Befehl" aber da da /v
steht sucht er nach allem wo net "Der Befehl" drin istwie lol
also könnte ich mit dem
findstr
der Batch auch sagen dass er in der "localgroup.txt" nach "Der Befehl" suchen soll un dann mit/v
sucht er alles was da drin steht außer mit "Der Befehl"hab ich das richtig verstanden?
_____________________________________________________________________
EDIT:
set gruppe=findstr /v /c: "Der Befehl" in "D:\groupu\localgroup\localgroups.txt"
undfor /f "skip=6 delims=" %%a in ('net localgroup %Gruppe%^|findstr /v /c:"Der Befehl"') do >>%benutzer% echo %Gruppe%, %%a
geht net >_<
war klar dass ichs net hinbekomme ^^
LÖSUNG 27.03.2009 um 08:49 Uhr
Hallo Pepper-jk!
Um die Frage von TimoBeil von oben aufzugreifen: Was musst Du daher machen, wenn Du die Zeile mit "The command" los werden willst?
Grüße
bastla
hab ich das richtig verstanden?
So ist es - wobei "alles" mit "alle Zeilen" genauer beschrieben wäre. Das "/c" sorgt übrigens dafür, dass der Suchbegriff als Einheit gesehen wird (und nicht nach den beiden Wörtern einzeln gesucht wird).Um die Frage von TimoBeil von oben aufzugreifen: Was musst Du daher machen, wenn Du die Zeile mit "The command" los werden willst?
Grüße
bastla
LÖSUNG 27.03.2009 um 08:52 Uhr
Sieh mal oben was ne scheiße ich verzapft hab ^^
ähm also genaugenommen gibt er mir für:
aus
ähm also genaugenommen gibt er mir für:
for /f "skip=6 delims=" %%a in ('net localgroup "Administrators"^|findstr /v /c:"Der Befehl"') do >>%benutzer% echo Administrators, %%a
Administrators, Administrator
Administrators, The command completed successfully.
Administrators, The command completed successfully.
aus
LÖSUNG 27.03.2009 um 12:15 Uhr
Hallo Pepper-jk!
Na gut, dann also das Zusammensetzen der Zeile (nochmals am Beispiel der Gruppe "Administrators"):
Im (für jeden Benutzernamen aufgerufenen) Unterprogramm ":ProcessUser" wird der übergebene Name (kommt dort als Parameter %1 an) dem derzeitigen Inhalt der Zeile hinzugefügt.
Ausgegeben wird die Zeile erst, wenn sie komplett ist (und dann in diesem Beispiel nur auf den Bildschirm) - siehe Zeile 6. Der Batch (das Hauptprogramm) endet in Zeile 7.
Grüße
bastla
Na gut, dann also das Zusammensetzen der Zeile (nochmals am Beispiel der Gruppe "Administrators"):
01.
@echo off & setlocal
02.
set "gruppe=Administrators"
03.
04.
set "Zeile=%gruppe%"
05.
for /f "skip=6 delims=" %%a in ('net localgroup "%gruppe%"^|findstr /v /i /c:"The command"') do call :ProcessUser "%%a"
06.
echo %Zeile%
07.
goto :eof
08.
09.
:ProcessUser
10.
set "Zeile=%Zeile%, %~1"
11.
goto :eof
Ausgegeben wird die Zeile erst, wenn sie komplett ist (und dann in diesem Beispiel nur auf den Bildschirm) - siehe Zeile 6. Der Batch (das Hauptprogramm) endet in Zeile 7.
Grüße
bastla
LÖSUNG 27.03.2009 um 12:48 Uhr
Hallo Bastla
Danke für den Quelltext. Ich habe noch eine frage:
Wenn ich deine Zeile 2 durch
ersetze dann müsste er das doch automatisch für jede Gruppe machen oder?
Tschuldige dass ich immer noch nerv xD
MfG Pepper
Danke für den Quelltext. Ich habe noch eine frage:
Wenn ich deine Zeile 2 durch
@for /F %%u in ('find/N /V /C:"Der Befehl" D:\groupu\localgroup\localgroups.txt^') do @set group=%%u
ersetze dann müsste er das doch automatisch für jede Gruppe machen oder?
Tschuldige dass ich immer noch nerv xD
MfG Pepper
LÖSUNG 27.03.2009 um 13:44 Uhr
So hab das ganze noch mal überarbeitet und deinen "Tipp" eingebaut Bastla:
Kann mir jemand bei Zeile 6 helfen? Er gibt mir nur die User aus der Gruppe "Users" aus. Hat das was mit den "tokens=1" zu tun oder wieso tut die Batch das?
MfG Pepper
@echo off & setlocal
REM Schritt 1) Variablen erstellen
REM set "gruppen="D:\groupu\localgroup\localgroups.txt""
set "benutzer="D:\groupu\localgroup\user_output.txt""
@for /F "tokens=1" %%u in (D:\groupu\localgroup\localgroups.txt) do @set gruppe=%%u
set "Zeile=%gruppe%"
REM Schritt 2) ggf alte Dateiausgaben löschen
REM if exist %gruppen% del %gruppen%
if exist %benutzer% del %benutzer%
REM Schritte 3) Localgroups auslesen und sortieren
REM for /f "delims=*" %%i in ('net localgroup^|find "*"^|sort') do >>%gruppen% echo %%i
REM Schritt 4) Benutzergruppen mit User in Datei schreiben
REM for /f "skip=6 delims=" %%a in ('net localgroup "%gruppe%"^|findstr /v /i /c:"The command"') do call :ProcessUser "%%a"
echo >>%benutzer% %Zeile%
REM Schritt 5) Anzeigen starten
REM start Localgroupuser.vbs
start Localgroup.vbs
goto :eof
REM Zwischenschritt
REM :ProcessUser
set "Zeile=%Zeile%, %~1"
goto :eof
REM Schritt 1) Variablen erstellen
REM set "gruppen="D:\groupu\localgroup\localgroups.txt""
set "benutzer="D:\groupu\localgroup\user_output.txt""
@for /F "tokens=1" %%u in (D:\groupu\localgroup\localgroups.txt) do @set gruppe=%%u
set "Zeile=%gruppe%"
REM Schritt 2) ggf alte Dateiausgaben löschen
REM if exist %gruppen% del %gruppen%
if exist %benutzer% del %benutzer%
REM Schritte 3) Localgroups auslesen und sortieren
REM for /f "delims=*" %%i in ('net localgroup^|find "*"^|sort') do >>%gruppen% echo %%i
REM Schritt 4) Benutzergruppen mit User in Datei schreiben
REM for /f "skip=6 delims=" %%a in ('net localgroup "%gruppe%"^|findstr /v /i /c:"The command"') do call :ProcessUser "%%a"
echo >>%benutzer% %Zeile%
REM Schritt 5) Anzeigen starten
REM start Localgroupuser.vbs
start Localgroup.vbs
goto :eof
REM Zwischenschritt
REM :ProcessUser
set "Zeile=%Zeile%, %~1"
goto :eof
Kann mir jemand bei Zeile 6 helfen? Er gibt mir nur die User aus der Gruppe "Users" aus. Hat das was mit den "tokens=1" zu tun oder wieso tut die Batch das?
MfG Pepper
LÖSUNG 27.03.2009 um 15:10 Uhr
Hallo Pepper-jk!
Lösen lässt sich das durch eine(n Aufruf der) Verabeitung innerhalb der Schleife (wobei diese auch an der richtigen Stelle platziert sein sollte, also erst nachdem die aktuellen Daten in die Gruppendatei geschrieben wurden).
Um das Ganze einem (hoffentlich) gedeihlichen Ende zuzuführen:
Die hier gezeigte Lösung mit zwei Unterprogrammebenen (für jede Gruppe wird ":ProcessGroup" und für jeden Benutzer ":ProcessUser" aufgerufen) löst das Problem, dass in einer "for"-Schleife (und auch zB in einem "if"-Konstrukt) die Variableninhalte (außer den Laufvariablen der Schleife) bereits zu Beginn der Schleife ermittelt und innerhalb der Schleife zwar verändert, aber für den lesenden Zugriff nicht aktualisiert werden.
Eine kompaktere Alternative wäre die Verwendung von "delayedExpansion" (allerdings sollten dann in den Daten keine "!" vorkommen):
Noch eine Anmerkung zur Verwendung der Anführungszeichen: Um flexibel zu bleiben, setze ich diese grundsätzlich erst dort, wo sie tatsächlich benötigt werden, und nicht bereits bei der Zuweisung an eine Variable (siehe etwa Zeilen 4,5 und 9,10).
Grüße
bastla
Kann mir jemand bei Zeile 6 helfen? Er gibt mir nur die User aus der Gruppe "Users" aus. Hat das was mit den "tokens=1" zu tun oder wieso tut die Batch das?
Innerhalb der Schleife wird %gruppe% immer wieder durch den Inhalt der nächsten Zeile überschrieben, sodass am Ende eben der Wert der letzten Zeile in der Variablen steht.Lösen lässt sich das durch eine(n Aufruf der) Verabeitung innerhalb der Schleife (wobei diese auch an der richtigen Stelle platziert sein sollte, also erst nachdem die aktuellen Daten in die Gruppendatei geschrieben wurden).
Um das Ganze einem (hoffentlich) gedeihlichen Ende zuzuführen:
01.
@echo off & setlocal
02.
REM Schritt 1) Variablen erstellen
03.
REM ===========================================================
04.
set "gruppen=D:\groupu\localgroup\localgroups.txt"
05.
set "benutzer=D:\groupu\localgroup\user_output.txt"
06.
07.
REM Schritt 2) ggf alte Dateiausgaben löschen
08.
REM ===========================================================
09.
if exist "%gruppen%" del "%gruppen%"
10.
if exist "%benutzer%" del "%benutzer%"
11.
12.
REM Schritte 3) Localgroups auslesen und sortieren
13.
REM ===========================================================
14.
for /f "delims=*" %%i in ('net localgroup^|find "*"^|sort') do >>"%gruppen%" echo %%i
15.
16.
REM Schritt 4) Benutzergruppen mit User in Datei schreiben
17.
REM ===========================================================
18.
for /f "usebackq delims=" %%u in ("%gruppen%") do call :ProcessGroup "%%u"
19.
20.
REM Schritt 5) Anzeigen starten
21.
REM ===========================================================
22.
start Localgroupuser.vbs
23.
start Localgroup.vbs
24.
goto :eof
25.
26.
REM Zwischenschritte
27.
REM ===========================================================
28.
:ProcessGroup
29.
set "Zeile=%~1"
30.
for /f "skip=6 delims=" %%a in ('net localgroup %1^|findstr /v /i /c:"The command"') do call :ProcessUser "%%a"
31.
>>"%benutzer%" echo %Zeile%
32.
goto :eof
33.
REM ===========================================================
34.
:ProcessUser
35.
set "Zeile=%Zeile%, %~1"
36.
goto :eof
Eine kompaktere Alternative wäre die Verwendung von "delayedExpansion" (allerdings sollten dann in den Daten keine "!" vorkommen):
01.
@echo off & setlocal enabledelayedexpansion
02.
REM Schritt 1) Variablen erstellen
03.
REM ===========================================================
04.
set "gruppen=D:\groupu\localgroup\localgroups.txt"
05.
set "benutzer=D:\groupu\localgroup\user_output.txt"
06.
07.
REM Schritt 2) ggf alte Dateiausgaben löschen
08.
REM ===========================================================
09.
if exist "%gruppen%" del "%gruppen%"
10.
if exist "%benutzer%" del "%benutzer%"
11.
12.
REM Schritte 3) Localgroups auslesen und sortieren
13.
REM ===========================================================
14.
for /f "delims=*" %%i in ('net localgroup^|find "*"^|sort') do >>"%gruppen%" echo %%i
15.
16.
REM Schritt 4) Benutzergruppen mit User in Datei schreiben
17.
REM ===========================================================
18.
for /f "usebackq delims=" %%u in ("%gruppen%") do (
19.
set "Zeile=%%u"
20.
for /f "skip=6 delims=" %%a in ('net localgroup "%%u"^|findstr /v /i /c:"The command"') do set "Zeile=!Zeile!, %%a"
21.
>>"%benutzer%" echo !Zeile!
22.
)
23.
REM Schritt 5) Anzeigen starten
24.
REM ===========================================================
25.
start Localgroupuser.vbs
26.
start Localgroup.vbs
Grüße
bastla
LÖSUNG 27.03.2009 um 16:47 Uhr
Hi Bastla
DANKE des ist genau das was ich gebraucht habe.
Nur eins noch das "Der Befehl wurde erfolgreich ausgeführt" oder das gleiche auf english .. geht das net weg (also in der .txt?)?
MfG Pepper
DANKE des ist genau das was ich gebraucht habe.
Nur eins noch das "Der Befehl wurde erfolgreich ausgeführt" oder das gleiche auf english .. geht das net weg (also in der .txt?)?
MfG Pepper
LÖSUNG 27.03.2009 um 17:03 Uhr
Hallo Pepper-jk!
Wo wäre denn diese Zeile enthalten?
In der Gruppendatei landen nur alle Zeilen, die einen Stern enthalten, und in der Benutzerdatei sollte durch
diese Zeile ja auch ausgefiltert werden ...
Grüße
bastla
Wo wäre denn diese Zeile enthalten?
In der Gruppendatei landen nur alle Zeilen, die einen Stern enthalten, und in der Benutzerdatei sollte durch
... findstr /v /i /c:"The command" ...
Grüße
bastla
LÖSUNG 30.03.2009 um 07:58 Uhr
Hallo Bastla
Ich war am Freitag Nachmittag bei mir zuhause und da habe ich ja Vista -.-
Da kam diese Zeile "Der Befehl wurde erfolgreich durchgeführt."
Jetzt am Praktikumsplatz (Windows Server 2003) geht alles keine Zeile mehr die "The command completed succsesful." oder wie au imma
Danke Bastla
jetzt geht alles ;)
_________________________________________________
EDIT:
Achso jetzt peil ich des endlich
sorgt dafür dass er alle Zeilen wo "The command" drinsteht net ausgibt - bei meinem deutschem Vista gibt er dann natürlich "Der Befhel..." aus weil da ja net "The command" steht
Ok wieder was dazu gelernt
Ich war am Freitag Nachmittag bei mir zuhause und da habe ich ja Vista -.-
Da kam diese Zeile "Der Befehl wurde erfolgreich durchgeführt."
Jetzt am Praktikumsplatz (Windows Server 2003) geht alles keine Zeile mehr die "The command completed succsesful." oder wie au imma
Danke Bastla
jetzt geht alles ;)
_________________________________________________
EDIT:
Achso jetzt peil ich des endlich
/v /i /c:"The command"
sorgt dafür dass er alle Zeilen wo "The command" drinsteht net ausgibt - bei meinem deutschem Vista gibt er dann natürlich "Der Befhel..." aus weil da ja net "The command" steht
Ok wieder was dazu gelernt
LÖSUNG 30.03.2009, aktualisiert 18.10.2012
Hier habe ich wieder ein neues Problem:
https://www.administrator.de/forum/benutzergruppen-per-batch-script-vers ...
MfG Pepper
https://www.administrator.de/forum/benutzergruppen-per-batch-script-vers ...
MfG Pepper
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte