94451
Goto Top

User auslesen via batch und in textdatei schreiben

hallo ich möchte gerne automatisiert vom beliebigen windowspc alle vorhandenen user via batch auslesen und in eine textdatei schrieben,...

hiermit bin ich schon sehr weit gekommen,...

for /F %%i in ('net user') do echo %%i >> user_tmp.txt

jetzt hab ich aber noch zwei zeilen müll drinnen,...

Benutzerkonten


wie kann ich das rausfiltern?
ist das immer gleich? XP, windows vista windows 7?

danke

Content-Key: 164108

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

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

Member: bastla
bastla Apr 06, 2011 at 16:09:16 (UTC)
Goto Top
Hallo Roadrunner777!

Das Stichwort "skip" sollte Dich weiter bringen ...

... aber falls Du das mit dem "Filtern" wörtlich verstanden wissen willst: "findstr /?" (Du willst ja sicher auch die letzte Zeile noch loswerden)
Mit Deiner Schleife wirst Du allerdings nur ein (starkes) Drittel der Benutzer erhalten ...

Grüße
bastla
Member: Biber
Biber Apr 06, 2011 at 16:20:06 (UTC)
Goto Top
Moin Roadrunner777,

Gute Nachrichten, schlechte Nachrichten...

Die guten zuerst
Zum Üben des Zusammenspiels einer FOR/F-Anweisung mit Find/Findstr /v ist das Beispiel gut geeignet.

Grundsächlich könntest du als prinzipiell funktinierenden Ansatz einfach alles [nacheinander] wegfiltern, was dich stört.
Beispiel am CMD-Prompt:
net user |findstr /v "\-\-"|findstr /v "erfolgreich"|findstr /v "Benutzerkonten"

kannst du auch kombinieren mit einer "skip=3"-Angabe in der FOR/F-Anweisung.
Lässt sich weiter eindampfen und kürzer fassen... bekommst du hin.


Schlechte Nachricht

Wenn du mal zwei Schritt zurücktrittst und dann nochmal einen gelassenen Blick auf Input, Aufwand, maximal erreichbaren Nutzen/Output wirfst...

Hey, der Output von "Net user" ist unter Brüdern gesagt denkbar ungeeignet als Basis.
Egal, womit eine nachträgliche Strukturierung erfolgen soll.
Ist Dönekens, damit rumzualbern, besonders da du für jedes OS und jede Sprachversion damit rechnen kannst, dass es NICHT MEHR passt.

--> nimm ein anderes Tool, das die Userliste als "ein User pro Zeile" ausgibt.
Es gibt ein paar One-Trick-Tools, die (nur) das können. Deren Namen sind relativ naheliegend (netuser.exe, netusers.exe, ListUsers.exe...)-->Suchmaschine

Grüße
Biber
Member: Skyemugen
Skyemugen Apr 06, 2011 at 16:22:47 (UTC)
Goto Top
Aloha,

zusätzlich noch die Anmerkung: (weiß jetzt nicht, wie die Auflistung bei Windows XP ist)

Ohne etwas für bzw. gegen die Leerzeichen zu tun, kommt (bei WIn 7 zumindest) nicht allzuviel bei raus. ;) - aber delims sollen dagegen gut wirken, habe ich gehört

greetz André

P.S.: stört dich das Der Befehl wurde erfolgreich ausgeführt. eigentlich nicht in der txt? ^.^ - falls doch greife mal auf bastlas Hinweis mit findstr zurück, damit kannst du dann auch etwas ausschließen

edit: too late ... Biber, Biber *grml* ^_^
Mitglied: 94451
94451 Apr 06, 2011 at 16:35:15 (UTC)
Goto Top
wow, danke das ging schnell,...

ich werd mich mal durchbeisen face-smile
Mitglied: 99045
99045 Apr 06, 2011 at 18:05:28 (UTC)
Goto Top
Hi,

vielleicht genügt dir ja die Einzeilenlösung ohne externes Tool bzw. Zusatztool?
dir /ad /b "%homedrive%%homepath%\.." >  userliste.txt  

Voraussetzung dafür ist allerdings, dass alle User, die auf dem Rechner eingerichtet sind, sich wenigstens einmal angemeldet haben, so dass das Profilverzeichnis auch existiert.
Member: Biber
Biber Apr 06, 2011 at 18:19:04 (UTC)
Goto Top
Moin Kaputtnick,

...Voraussetzung dafür ist allerdings...sich wenigstens einmal angemeldet haben...
im Prinzip jein.... face-wink

Das ist zwar eine notwendige Bedingung, um diejenigen Usernamen zu erwischen, die er haben will.
Aber es ist nicht hinreichend, um die auszuschliessen, die er nicht wissen will.
>dir /ad /b "%userprofile%\.."
Administrator --->ok
All Users  -->???, na ja
Default User  --->??? na ja
Biber  -->ok
OtherUser --> ok
LocalService ---->?? wc ... wohl caum
NetworkService --->?? wohl caum

[die eventuellen Diskrepanzen zwischen %userprofile% und den beiden Explorervariablen %homeBLA% sind mir nicht weiter wichtig.]

Grüße
Biber
Mitglied: 99045
99045 Apr 06, 2011 at 18:27:48 (UTC)
Goto Top
Moin Biber,

man muss ja nicht alles mundgerecht vorkauen. Manchmal reicht auch eine Anregung. face-smile

Wie man mit findstr einzelne Begriffe ausklammern kann, hast du ja in dankenswerter Weise bereits dokumentiert..

Man könnte allerdings die von dir aufgezeigte Ausgabe anschließend noch zerlegen, indem man den Ausgabestring spaltenweise trennt. Für den Usernamen sind ja gezielt feste Stellen vorgegeben.

[und um das mal klarzustellen: "alle vorhandenen User" schließt auch die ein, die DU nicht haben willst.] face-devilish

Grüße
Member: Biber
Biber Apr 06, 2011 at 18:37:11 (UTC)
Goto Top
Moin Kaputtnick,

und BTW noch ein nachträgliches Willkommen im Forum,
jepp, mit diesem Nachtrag der nötigen Nachbehandlung ist dein Ansatz ein vollwertiger Ersatz für die von mir genannten One-Trick-Utilities.

Und was das Vorkauen-Müssen betrifft... okay, er hatte geschrieben, er wolle sich durchbeissen.
Vielleicht habe ich das zu leichtfertig überlesen. face-wink

Grüße
Biber
[Edit]
[und um das mal klarzustellen: "alle vorhandenen User" schließt auch die ein, die DU nicht haben willst.]
im Prinzip jein face-big-smile ... ich mag ja alle User, ob blond, ob rothaarig...

Dennoch:
Bei der NET USER-Anzeige werden mir zusätzlich "Gast" und "Hilfeassistent" angezeigt, nicht aber "Default User" und "All Users" oder "LocalService"...
[/Edit]
Mitglied: 99045
99045 Apr 06, 2011 at 18:57:10 (UTC)
Goto Top
Ok, 1:1 face-smile
Da habe ich sogar noch ein paar mehr bei der Anzeige von net user.

Man beachte allerdings meine Einleitung:
vielleicht genügt dir ja .... ?

Das war eine Frage. :-P

Grüße
Member: Biber
Biber Apr 06, 2011 at 19:13:53 (UTC)
Goto Top
[OT]
Zitat von @99045:
> vielleicht genügt dir ja .... ?

Das war eine Frage. :-P
Jahaa..
Allerdings lässt sich manchmal schwer unterscheiden, ob es Pünktchen vor dem Fragezeichen sind oder das Kleingedruckte....*g

Grüße
Biber
[/OT]
Mitglied: 94451
94451 Apr 07, 2011 at 06:45:39 (UTC)
Goto Top
Hey ihr,...


das klingt alles gut,...
mein problem ist, das sind alles netzwerkuser :/ und ich ruf das cmd via php d.h. ich komm auch iwie nicht richtig in die dokumente und einstellungen face-sad

was gibt es noch für möglichkeiten?

leider listet mir mein cmd die user so auf
da steht was
user1 ........................... user2 ........................... user3
user4 ........................... user5
und da steht nochmal was,...

[ ........................... ] ist zu erstzen durch leerzeichen oder tabs (weiß nicht), im Forum werden diese nicht angezeigt.

admin und irgendwelche sonderuser sind mir egal,... die kann ich im schlimmsten fall dann auch mit php rausfiltern,... wichtig sind mir die ganzen User die ohne umlaute und Leerzeichen geschrieben werden,...

jemand ne idee?

ideal wäre jetzt:
user_tmp.txt:
user1
user2
user3
user4
user5
Member: bastla
bastla Apr 07, 2011 at 08:30:15 (UTC)
Goto Top
Hallo Roadrunner777!

Wenn Du ein wenig kombinierst, könnte dasErgebnis so aussehen:
for /f "delims=" %%i in ('net user^|findstr /v "\-\-"^|findstr /v "erfolgreich"^|findstr /v "Benutzerkonten"') do for %%a in (%%i) do >>user_tmp.txt echo %%a
Grüße
bastla
Member: Biber
Biber Apr 07, 2011 at 08:53:14 (UTC)
Goto Top
Moin Roadrunner777,

nun musst du dich aber mal entscheiden, ob durchbeissen oder rentnergerecht vorgeschnitten. face-wink

Eine hausfrauensichere out-of-the-box-rundum-sorglos-Lösung würde so aussehen:
@echo off & setlocal

set "userliste=R:\ulist.txt"  
@echo Benutzerkonten auf %computername% > %userliste%
for /f "skip=4 delims=" %%a in ('net user') do call :trim "%%a"  
pause
goto :eof

:trim
set user1=
set user2=
set user3=
set zeile=%~1
if "%zeile:~0,10%"=="Der Befehl" goto :eof  
::  @echo zeile=%zeile%
set user1=%zeile:~0,25%
set user2=%zeile:~25,25%
set user3=%zeile:~50,25%

if defined user1 (@echo user1=%user1% & @echo %user1% >> %userliste%) 
if defined user2 (@echo user2=%user2% & @echo %user2% >> %userliste%)
if defined user3 (@echo user3=%user3% & @echo %user3% >> %userliste%)
goto :eof

Aber derartige Jetzt-musst-du-nur-den-Guttenberg-machen-Lösungen gibts hier nicht.

Grüße
Biber
Mitglied: 94451
94451 Apr 11, 2011 at 11:01:29 (UTC)
Goto Top
Hallo,

Danke,...

@Biber, sorry das ich mich so anstelle,... aber meine eigentliche Welt ist PHP,... konnte leider nicht richtig kombinieren :/

jetzt hab ichs aber

Danke face-smile
Member: Biber
Biber Apr 11, 2011 at 11:31:09 (UTC)
Goto Top
Moin Raodrunner777,

wenn du dabei und dadurch etwas gelernt hast, dann war es uns das wert, da kann ich für alle hier vertretenen kommentierer sprechen.

Nichtsdestotrotz - falls du in diesem hin-und herwogenden Thread nicht mehr das Gesamtbild im Blick hast...

--> Kompliziert ist es eigentlich nur dadurch geworden, dass dein Plan vorsah, aus der (dafür suboptimalen) Ausgabe des NET USER-Befehls eine verwertbare Liste alle User zu erhalten.

Nimm als eine Erfahrung mit
"Hey, wenn ich fest in den Boden gerammte Vorgaben mache, dann wird mir wortwörtlich eine Lösung dazu zusammengebraten,
wie umständlich es auch sein mag."


Hättest du gefragt
"Wie kann möglichst stressarm das Ziel XY erreichen, wenn ich nur Batch und zwei Büroklammern benutzen darf und kein Admin bin.",

dann wären vielleicht andere Lösungen gekommen.

Grüße und dank für dein Feedback
Biber