38873
Goto Top

Mit Batch - Alle lokale User löschen ausser...

Lösche alle User ausser Administrator, Service

Hallo

Ich möchte über eine Batch alle User löschen ausser 2 vorgebene User die erhalten bleiben sollen.
Bei den Usern handelt es sich um lokale User die Administratorrechte haben.

Hintergrund der Aktion ist eine Installationsbatch die nach einer Imageerstellung auf dem jeweiligen
Client auszuführen ist. Nachdem das Image aufgesetzt ist sollen alle User gelöscht werden, ausser
eben Administrator und Service. Weiss jemand wie man das bewerkstelligen kann ?

Ich bin für jeden Tipp dankbar.

Grüße

muLio

Content-ID: 66917

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

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

MRosoft
MRosoft 23.08.2007 um 15:06:51 Uhr
Goto Top
Mit diesem Script kannst Du einen expliziten User löschen.

Name: DelUser.vbs

Option Explicit
On Error Resume Next

Dim strComputer
Dim oComputer
Dim oUser
Dim oNetwork
Dim oGroup

'Hier den Namen des zu löschenden Benutzers eintragen
Const cUsername="Benutzername"

'Wie heißt der Rechner
Set oNetwork = WScript.CreateObject("WScript.Network")
strComputer=oNetwork.ComputerName
Set oComputer = GetObject("WINNT://" & strComputer & ",computer")

'Löschen von cUsername
oComputer.Delete "User", cUsername


Die VBS mit cScript DelUser.vbs aufrufen und los geht's
38873
38873 23.08.2007 um 15:13:29 Uhr
Goto Top
Ich glaube ich wurde missverstanden.

Nochmal eine kurze Erklärung:

Ein Image wird auf ein Notebook installiert (es gibt verschiedene images mit verschiedenen usern [abteilungsspezifisch] )

Nachdem man sich mit dem lokalen Administrator eingelogged hat, startet man "händisch" eine Batch. Diese Batch soll unter anderem alle lokalen User löschen ausser "Administrator" und "Service" <- Das soll automatisch funktionieren.

Mein Problem ist, dass ich nicht weiss wie ich mit Bordmitteln von WindowsXP eine Userliste erstellen kann bei der User für User in einer Zeile steht. Wenn ich das hätte könnte ich alle User löschen ausser "Administrator" und "Service"

Löschen wollte ich die User mit dem Befehl:

net user


Ich hoffe dass das jetzt verständlicher war.
paulepank
paulepank 23.08.2007 um 16:04:57 Uhr
Goto Top
Hallo ,

du meinst so ?

for /f "skip=4 tokens=1,2,3" %i in ('net user') do @if not "%i"=="Der" @echo %i >>user.txt & @echo %j >>user.txt & @echo %k >>user.txt  


gilt für ein deutsches System
Den Schmus ringsrum schreibst du allein face-smile

cu paulepank

EDIT: in einer Batch wird aus % natürlich %%
bastla
bastla 23.08.2007 um 16:32:23 Uhr
Goto Top
... oder, um die bis zu 2 unschönen Zeilen am Ende der Liste zu vermeiden:
for /f "skip=4 tokens=1,2,3" %i in ('net user^|findstr /v "ausgeführt."') do @(echo %i & echo.%j & echo.%k)>>UserList.txt  

Grüße
bastla
paulepank
paulepank 23.08.2007 um 16:45:52 Uhr
Goto Top
@bastla,

das mach ich doch auch mit "if not ..." face-smile

deine Lösung gefällt mir aber auch face-smileface-smile

cu paulepank
38873
38873 23.08.2007 um 16:59:12 Uhr
Goto Top
Hallo

Erstmal vielen Dank für eure kreativen Antworten.

Ich habs mittlerweile recht easy lösen können.

@echo OFF
cd "C:\Dokumente und Einstellungen"
dir /b > users.txt

Wenn ich das so mache dann schreibt er mir alle schön brav in eine Datei.

Jetzt muss ich nur noch den Administrator und Service Account aus der Datei schmeissen und dann alle anderen User löschen. Wer da noch eine Idee hat -> ich bin für alles offen.

btw: also die Idee mit dir /b find ich irgendwie nice face-smile))

Grüße

muLio
paulepank
paulepank 23.08.2007 um 17:19:06 Uhr
Goto Top
Hallo
Mein Problem ist, dass ich nicht weiss wie ich mit Bordmitteln von WindowsXP eine Userliste erstellen kann bei der User für User in einer Zeile steht.

Das hast du ja jetzt.

Wenn ich das hätte könnte ich alle User löschen ausser "Administrator" und "Service"

Das wolltest (und solltest - learning by doing) du also allein machen


@echo OFF
cd "C:\Dokumente und
Einstellungen"
dir /b > users.txt

Wenn ich das so mache dann schreibt er mir
alle schön brav in eine Datei.

ja aber
1. auch "All Users" und der wird gebraucht !
2. nur die User, die sich schon mal angemeldet hatten und nicht alle die eingerichtet sind.

cu paulepank
bastla
bastla 23.08.2007 um 17:26:36 Uhr
Goto Top
@paulepank

Ich hatte gemeint, wenn die Useranzahl nicht ein Vielfaches von 3 ist und daher %j und/oder %k leer sind, steht "ECHO ist eingeschaltet (ON)." in der Liste ...

Im übrigen waren wir uns hinsichtlich der Vorgangsweise ja ohnehin ziemlich einig ... face-smile

@38873
Was mich irgendwie interessieren würde - warum sind die User im Image überhaupt drin? Wäre doch eigentlich einfacher, sie gleich vor dem Erstellen des Images zu eliminieren ...

Grüße
bastla
38873
38873 23.08.2007 um 17:47:18 Uhr
Goto Top
@bastla

Ich arbeite erst seit Juli in dieser EDV Abteilung. Und da muss ich mich halt mit dem zufrieden geben was ich so vorfinde. Warum da teilweise Images mit verschiedenen Usern angelegt sind konnte ich bis jetzt selber auch nicht verstehen. Aber ich versuche es eben einfach so zu umgehen. Da pro Abteilung teilweise 3 verschiedene Images vorhanden sind, ist es etwas schwierig jetzt ein StandardImage zu erstellen. Mein Ansatz war erstmal das alles so hinzubiegen, dass es erstmal funktioniert und vor allem schneller geht.

Diese Usergeschichte ist ja nur ein kleiner Teil der Batch.

@paulepank

Auch hier scheint es ein Verständnisproblem zu geben. Natürlich habe ich nicht vor den Ordner "All Users" zu löschen. Ich habe das lediglich dazu "genutzt" um an die Usernamen ranzukommen. Das war für mich in dem Moment das einfachste was mir eingefallen ist.

Jetzt muss ich ja nur noch - so wie du schon erwähnt hast, alles unnötige aus der users.txt schmeissen und dann User für User einlesen und entsprechend löschen.

Vielen Dank für eure Hilfe ;)

Gruß

muLio
paulepank
paulepank 23.08.2007 um 18:12:11 Uhr
Goto Top
Hallo,

@38873
da dein eigentliches Problem gelöst ist, kannst du den niedlichen grünen Haken setzen.

@bastla,
wo du Recht hast hast du Recht face-smile

cu paulepank
38873
38873 24.08.2007 um 09:21:44 Uhr
Goto Top
Hi Leute

Ich bin heute morgen mit dem Abschnitt User löschen fertig geworden und wollte euch einfach mal das Ergebnis posten.

Vielen Dank and dieser Stelle den beiden Kollegen paulepank sowie basta


@echo OFF
SET APATH="%CD%"

del %TEMP%\users.txt
for /f "skip=4 tokens=1,2,3" %%i in ('net user^|findstr /v "Der"') do @(echo %%i & echo.%%j & echo.%%k)>>%TEMP%\users.txt

findstr /v "Administrator" %TEMP%\users.txt>%TEMP%\users1.txt&findstr /v "edv_tech" %TEMP%\users1.txt>%TEMP%\users2.txt&findstr /v "Gast" %TEMP%\users2.txt>%APATH%\users.txt

For /f "tokens=1" %%i IN (users.txt) DO (
cls
echo Loesche User %%i
net user %%i /DELETE
echo User %%i -> O.K.
ping 127.0.0.1 -n 10 -w 10000 > NUL
)



Viele Grüße
bastla
bastla 24.08.2007 um 10:06:39 Uhr
Goto Top
Hallo muLio!

Da "findstr" mehrere durch Leerstellen getrennte Suchbegriffe akzeptiert, sollte es auch so gehen:
@echo off
del users.txt
for /f "skip=4 tokens=1,2,3" %%i in ('net user^|findstr /v "Der"') do @(echo %%i & echo.%%j & echo.%%k)>>users.txt  
for /f %%i in ('findstr /v "Administrator edv_tech Gast" users.txt') do (  
	echo Loesche User %%i
	net user %%i /DELETE
	echo User %%i: -^> O.K.
	echo.
	ping 127.0.0.1 -n 10 -w 10000 > NUL
)
Unterschied (Nachteil?): In "users.txt" stehen bei dieser Variante noch alle User, also auch die nicht zu löschenden.

Falls übrigens bei Deinem Batch die "O.K."-Meldungen nicht sichtbar sein sollten, liegt es daran, dass ">" ohne Maskierung mit "^" als Umleitungszeichen verwendet wird ...

Grüße
bastla
38873
38873 24.08.2007 um 10:24:23 Uhr
Goto Top
Unterschied (Nachteil?): In
"users.txt" stehen bei dieser
Variante noch alle User, also auch die nicht
zu löschenden.

Falls übrigens bei Deinem Batch die
"O.K."-Meldungen nicht sichtbar
sein sollten, liegt es daran, dass
">" ohne Maskierung mit
"^" als Umleitungszeichen verwendet
wird ...

Grüße
bastla

Wo ist da jetzt der Unterschied was die users.txt angeht ? sie wird doch genauso erstellt wie bei mir ? Und danach laut deiner "for findstr" Variante werden alle user gelöscht bis auf x y z ?

bis auf dass du den findstr in eine for schleife gepackt hast fällt mir da jetzt nichts auf was anders is.

Danke für die Info wg. "Maskierung". Da hab ich wohl einen Fehler gemacht.
bastla
bastla 24.08.2007 um 10:29:30 Uhr
Goto Top
Hallo muLio!

In Deiner "%TEMP%\users.txt" steht der gleiche Inhalt wie in meiner "users.txt" - Du erzeugst aber auch noch abschließend eine gefilterte "%APATH%\users.txt", in welcher nur mehr die zu löschenden User stehen ...

Grüße
bastla
38873
38873 24.08.2007 um 10:32:25 Uhr
Goto Top
hi bastla

Ja, das ist ja auch richtig. Ich will ja denn die ganzen gefilterten löschen face-smile
bastla
bastla 24.08.2007 um 10:39:05 Uhr
Goto Top
Hallo muLio!

Mit Deiner Variante hast Du dann sozusagen eine "Protokolldatei" (zwar nicht der gelöschten, aber zumindest der zu löschenden User) erstellt - deshalb meine Überlegung, ob es ein Nachteil wäre, wenn (wie bei mir) alle User in der Liste stehen ...

Wenn es aber tatsächlich ein Protokoll werden soll, könntest Du noch etwas in der Art versuchen (ungetestet):
net user %%i /DELETE && echo Gelöscht: %%i >> Protokoll.txt
Falls der Löschbefehl ohne Fehler ausgeführt wurde, wird eine entsprechende Zeile ins Protokoll geschrieben.

Grüße
bastla