naduah
Goto Top

User durch eine Batch auslesen

Hallo zusammen,

ich möchte gerne von einem Server die User in Ihren Benutzergruppen auslesen und zur Auswertung in eine Textdatei schreiben. Mein Script klappt auch schon recht gut, aber leider gibt es auch Benutzergruppen, die in Ihrem Namen Leerzeichen beinhalten. Diese erfasst mein Script leider nicht und ich weiß auch keine Abhilfe.

@echo off & setlocal

REM Schritt 1) Variablen erstellen
REM ===========================================================
set server = SERVERNAME
set gruppen=D:\admin\localgroups.txt
set gruppenliste=D:\admin\localgroups_listing.txt
set benutzer=D:\admin\user_output.txt

REM Schritt 2) ggf alte Dateiausgaben löschen
REM ===========================================================
if exist %gruppen% del %gruppen%
if exist %gruppenliste% del %gruppenliste%
if exist %benutzer% del %benutzer%

REM Schritt 3) Localgroups auslesen
REM ===========================================================
Net Localgroup %server% >>%gruppen%


REM Schritt 4) Datei mit den Localgroups untereinanderschreiben
REM ===========================================================
for %%a in (%gruppen%) do (
echo aus Datei %%a:
for /F "delims=* tokens=1 skip=2" %%i in ('find "*" %%a') do @echo %%i >%%~na.tfw>>%gruppenliste%
for /F "delims=* tokens=2 skip=2" %%i in ('find "*" %%a') do @echo %%i >%%~na.tfw>>%gruppenliste%
for /F "delims=* tokens=3 skip=2" %%i in ('find "*" %%a') do @echo %%i >%%~na.tfw>>%gruppenliste%
)

REM Schritt 4a) Datei mit den unterschriebenen Localgroups sortieren
REM ===========================================================
sort %gruppenliste% >> %gruppen%


REM Schritt 5) Benutzergruppen mit User in Datei schreiben
REM ===========================================================
for /f %%i IN (%gruppen%) DO net localgroup %%i >> %benutzer%

Schreibe ich im Schritt 5 statt 'net localgroup %%i >> %benutzer%' den String 'net localgroup "Backup Operators" >> %benutzer%' würde er diese Benutzergruppe auslesen.

Viele Dank für eure Mühe

Content-ID: 111517

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

60730
60730 16.03.2009 um 13:41:40 Uhr
Goto Top
Moin,

irgendwie hab ich grad einen Hänger....

set server = SERVERNAME
und
Net Localgroup %server% >>%gruppen%

das passt doch gar nicht...

(außer du hättest eine lokale Gruppe, die "SERVERNAME" - oder den Parameter dahinter) lautet.

Anyway...

for /f %%i IN (%gruppen%) DO net localgroup "%%i" >> %benutzer%

hast du mal probiert?

gruß
naduah
naduah 16.03.2009 um 14:28:16 Uhr
Goto Top
Dank für deine Antwort:
für SERVERNAME muss der Name oder die IP vom Server auf dem die cmd-Datei laufen soll eingetragen werden.

das %%i in Hochkommas zu setzen habe ich bereits probiert - negativ
bastla
bastla 16.03.2009 um 14:46:02 Uhr
Goto Top
Hallo naduah und willkommen imForum!

Da in einer "for /f"-Schleife Leerzeichen und TAB defaultmäßige Trennzeichen sind:
for /f "delims=" %%i IN (%gruppen%) DO net localgroup "%%i" >> %benutzer%
Grüße
bastla
60730
60730 16.03.2009 um 15:00:03 Uhr
Goto Top
Zitat von @naduah:
Dank für deine Antwort:
für SERVERNAME muss der Name oder die IP vom Server auf dem die cmd-Datei laufen soll eingetragen werden.

Gib mal:
Net Localgroup /?
in einer Dosbox ein.
Und du bekommst eine Ähnliche Ausgabe wie:

NET LOCALGROUP
[Gruppenname [/COMMENT:"Text"]][/DOMAIN]
Gruppenname {/ADD [/COMMENT:"Text"]|/DELETE} [/DOMAIN]
Gruppenname Name [ ...] {/ADD|/DELETE} [/DOMAIN]
heraus, das du ähnlich ja bereits "erfolgreich" einsetzt:
'net localgroup "Backup Operators" >> %benutzer%'
- dort steht nichts von "Server" oder dessen IP face-wink

Gruß
naduah
naduah 16.03.2009 um 15:32:25 Uhr
Goto Top
Sorry, leider habe immer noch keinen Erfolg

bei

for /f "delims=" %%i IN (%gruppen%) DO net localgroup "%%i" >> %benutzer%

bekomme ich nun ein leeres Blatt.

Was macht denn der Befehl delims eigentlich??
60730
60730 16.03.2009 um 15:37:36 Uhr
Goto Top
Servus,

wie Bastla schon richtig geschrieben hat:
Da in einer "for /f"-Schleife Leerzeichen und TAB defaultmäßige Trennzeichen sind:
Wird durch "delims=" u.a auch das Leerzeichen nicht als Trennzeichen erkannt.
Klartext: Trennzeichen=keines
Und wie ich dir versuche zu erklären - schau mal in deine Datei:
D:\admin\localgroups.txt
..wenn dein Script immer noch das obige ist - ist die leer - denn für SERVERNAME muss der Name oder die IP vom Server auf dem die cmd-Datei laufen soll eingetragen werden.

Ist ein Irrtum deinerseits - den du via Net Localgroup /? auch als Fehler identifizieren kannstface-wink


Gruß
naduah
naduah 16.03.2009 um 17:17:19 Uhr
Goto Top
Hallo Timo,
ich habe mich leider verkehrt ausgedrückt.
Das ganze Script funktioniert. Natürlich ist, statt SERVERNAME die Rechnername bei mir eingetragen z.B. w5de8ncki99 (kann aber auch die IP rein 174.23.4.7 - irgendwie so.
Die localgroups.txt (variable %gruppen%) wird auch gefüllt, wie z.B.

*Administrators
*Backup Operators
*meineGBG
usw

In der letzten Schleife wird nun mit dem Befehl:

for /f "delims=" %%i IN (%gruppen%) DO net localgroup %%i >> %benutzer%

diese localgroups.txt ausgelesen und mit dem Befehl net localgroup die User ausgelesen.

Funktioniert auch mit *Administrators und *meineGBG, aber nicht mit *Backup Operators.
Dort erkennt er nur noch Backup - und die Gruppe kennt er natürlich nicht.

Das ist mein Problem. Leider bin ich nun nicht mehr bei der Arbeit. Hier habe ich leider nur VISTA und der will die CMD nicht ausführen.
60730
60730 16.03.2009 um 17:50:20 Uhr
Goto Top
ok,

wie gesagt bei meinen System(en) ist das IP oder Servername nicht notwendig.

editiere mal:
for /f "delims=" %%i IN (%gruppen%) DO net localgroup %%i >> %benutzer%
in
for /f "delims=" %%i IN (%gruppen%) DO net localgroup "%%i" >> %benutzer%
type %benutzer% && pause
Dann solltest du sehen, was und hoffentlich incl. Backup Operators und nicht nur Backup in der Datei steht.

Gruß
bastla
bastla 16.03.2009 um 19:11:37 Uhr
Goto Top
Hallo naduah!

Der Stern stört - daher:
for /f "delims=* " %%i IN (%gruppen%) DO net localgroup %%i >> %benutzer%
Ansonsten bin ich auch etwas verwundert, dass
net localgroup %server%
auf einem W2000-Server (wie ich annehme) tatsächlich funktionieren sollte ...

Grüße
bastla

[Edit] Leerzeichen für "delims" ergänzt [/Edit]
naduah
naduah 17.03.2009 um 12:27:37 Uhr
Goto Top
hallo zusammen,
erst einmal danke für eure Mühe.

Ich habe mein Script jetzt vereinfacht, um Missverständnisse auszuräumen.

vorerst:
@Timo: dein letzter Befehl läuft, aber ohne die Gruppe mit dem Leerzeichen
@bastla: vergiss das * ich habe es herausgenommen, unten in der txt-datei standen alle ohne * drinnen
übrigens es handelt sich um einen Window Server 2003. - üsste nicht hinter dem = kein BLANK stehen? ( "delims= "), damit klar ist welche er nicht berücksichtigen soll.

meine %gruppen%-datei habe ich vorerst auf folgende Benutzergruppen beschränkt:
Administrators
Backup Operators
CDV_Sh_AP410981
CT_Int_FTP_Kosten
Alle werden ausgelesen nur nicht der zweite.

Nun habe ich folgenden Befehl angewendet:
FOR /F "delims= " %%i IN (%gruppen%) DO %%i >> %benutzer%
pause
Dann spukt mir das DOS-Fenster heraus:
Der Befehl "Administratos" ist ....usw
Der Befehl "Backup" ist ....usw
Der Befehl "CDV_Sh_AP410981" ist ....usw

Ein Zeichen, dass hier bereits die zweite Gruppe verstümmelt ist.
bastla
bastla 17.03.2009 um 13:31:46 Uhr
Goto Top
Hallo naduah!

Meine Vermutung Richtung "Server2000" kam daher, dass Du 3 Spalten einsammeln wolltest - ab 2003 werden die Gruppen nur in einer Spalte ausgegeben.

Mit dem fehlenden Leerzeichen hast Du natürlich Recht - ich ändere das oben.

Zum Erstellen der Datei %gruppen% sollte aber eigentlich genügen:
net localgroup|find "*">%gruppen%
Grüße
bastla
60730
60730 17.03.2009 um 13:57:38 Uhr
Goto Top
Servus,

nun hab ich dein Script mal selber ausprobiert und so wie unten funktioniert es - obwohl die Ausgabe evtl. noch ausbaufähig wäre.

rem @echo off & setlocal

REM Schritt 1) Variablen erstellen
REM ===========================================================
set server = SERVERNAME
set gruppen=C:\script\localgroup\localgroups.txt
set gruppenliste=C:\script\localgroup\localgroups_listing.txt
set benutzer=C:\script\localgroup\user_output.txt

REM Schritt 2) ggf alte Dateiausgaben löschen
REM ===========================================================
if exist %gruppen% del %gruppen%
if exist %gruppenliste% del %gruppenliste%
if exist %benutzer% del %benutzer%

REM Schritt 3) Localgroups auslesen
REM ===========================================================
Net Localgroup >>%gruppen%
pause
REM Schritt 4) Datei mit den Localgroups untereinanderschreiben
REM ===========================================================
for %%a in (%gruppen%) do (
echo aus Datei %%a:
for /F "delims=* tokens=1 skip=2" %%i in ('find "*" %%a') do echo "%%i" >%%~na.tfw>>%gruppenliste%  
for /F "delims=* tokens=2 skip=2" %%i in ('find "*" %%a') do echo "%%i" >%%~na.tfw>>%gruppenliste%  
for /F "delims=* tokens=3 skip=2" %%i in ('find "*" %%a') do echo "%%i" >%%~na.tfw>>%gruppenliste%  
)
REM Schritt 4a) Datei mit den unterschriebenen Localgroups sortieren
REM ===========================================================
sort %gruppenliste% > %gruppen%

REM Schritt 5) Benutzergruppen mit User in Datei schreiben
REM ===========================================================
for /f "delims=" %%i IN (%gruppen%) DO net localgroup %%i >> %benutzer%  
endlocal

Meine extra für diesen zweck angelegte Gruppe Hans und Franz - wird so wunderherrlichbar ausgelesen face-wink

gruß
naduah
naduah 17.03.2009 um 14:55:37 Uhr
Goto Top
Hei,
@bastla
Du hast gar nicht so schlecht geraten, dieses Script hat bis vor kurzem auf einem Server 2000 gelaufen, nun sind wir auf den 2005 umgezogen mit englischer Version.
Deine Abkürzung hat gut hingehauen, alleding mit doppelten > und in der nächstne Zeile Muss ich "delims=*" beachten. Nur das Leerzeichen mache weiterhin Probleme.

@Timo
Dein Script habe ich noch einmal komplett kopiert und nur bei den Pfaden angepasst. Leider kein Erfolg.

Da ich festgestellt habe, dass bei mir bereit im %%i die Verkrüppelung geschied, bin ich am überlegen in der %gruppen%-datei am Anfang sowie am Ende Zeichen einzusetzen, die ich eventuell über "delims=xyz" herauszufinden, um zu bestimmen dasss das was dazwischen sitzt die Gruppe ist.
naduah
naduah 17.03.2009 um 15:00:13 Uhr
Goto Top
Ich nochmal,
kann man eigentlich irgendwie sichtbar machen was beim Befehl:

for /f "delims=*" %%i IN (%gruppen%) DO net localgroup %%i >> %benutzer%

bei <IN (%gruppen%) > eigentlich ankommt?
60730
60730 17.03.2009 um 16:57:45 Uhr
Goto Top
Servus,

das war dann ja wohl eine schwere Geburt face-wink
Try this face-wink
rem @echo off &setlocal
REM Schritt 1) Variablen erstellen
REM ===========================================================
set server = SERVERNAME
set gruppen=C:\script\localgroup\localgroups.txt
set gruppenliste=C:\script\localgroup\localgroups_listing.txt
set benutzer=C:\script\localgroup\user_output.txt

REM Schritt 2) ggf alte Dateiausgaben löschen
REM ===========================================================
if exist %gruppen% del %gruppen%
if exist %gruppenliste% del %gruppenliste%
if exist %benutzer% del %benutzer%
if exist %benutzer%.ini del %benutzer%.ini

REM Schritt 3) Localgroups auslesen
REM ===========================================================
net localgroup|find "*">%gruppen%  
for %%a in (%gruppen%) do (
for /F "delims=* tokens=1 skip=2" %%i in ('find "*" %%a') do @echo %%i>%%~na.tfw>>%gruppenliste%)  

REM Schritt 4a) Datei mit den unterschriebenen Localgroups sortieren
REM ===========================================================
sort %gruppenliste% /o %gruppen%

REM Schritt 5) Benutzergruppen mit User in Datei schreiben
REM ===========================================================
for /f "delims=*" %%i IN (%gruppen%) DO @echo "%%i" && net localgroup "%%i" >> %benutzer%  
find /v "Der Befehl" %benutzer% > %benutzer%.ini  
type %benutzer%.ini
pause

Mir ging irgendwann mal der Überblick verloren...

Das ist mein Output:
> Aliasname        Hans und Franz
> Beschreibung
> 
> Mitglieder
> 
> ---------------------------------------------
> Franz und Hans

gruß
bastla
bastla 17.03.2009 um 18:24:36 Uhr
Goto Top
... bzw noch etwas reduziert (wenn W2000) kein Thema mehr ist:
@echo off & setlocal

REM Schritt 1) Variablen erstellen
REM ===========================================================
set gruppen=C:\script\localgroup\localgroups.txt
set benutzer=C:\script\localgroup\user_output.txt

REM Schritt 2) ggf alte Dateiausgaben löschen
REM ===========================================================
if exist %gruppen% del %gruppen%
if exist %benutzer% del %benutzer%

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 "delims=" %%i in (%gruppen%) do (  
    net localgroup "%%i"|findstr /v "ausgefhrt ----"  
    echo ###############################################################################	
)>>%benutzer%
Das "ausgefhrt" in der Zeile 20 wäre noch durch einen passenden Begriff aus der engl. Bestätigungsmeldung zu ersetzen ...

Grüße
bastla
naduah
naduah 18.03.2009 um 09:01:53 Uhr
Goto Top
MoinMoin zusammen,
was soll ich sagen - ihr seit beide Spitze, that's what I want.

Nun kann ich die Administration und Überwachung meiner Server wieder über mein Coldfusion-web vornehmen. Ihr habt mir sehr geholfen, da diese Scriptsprache nicht meine Stärke ist.

Nochmals tausend Dank, es hat sich gelohnt diesem Forum beizutreten.