Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Was macht dieses Script?

Frage Entwicklung Batch & Shell

Mitglied: Casper2k

Casper2k (Level 1) - Jetzt verbinden

28.12.2007, aktualisiert 02.01.2008, 4084 Aufrufe, 11 Kommentare

Hallo Leute,

habe einen Codeschnipsel gefunden in dem ich aber nicht wirklich durchblicke.

Ich bin gerade dabei mir ein Script für eine Serverwartung zusammenzubauen.

In diesem Scriptabschnitt möchte ich das Profilverzeichnis leeren; d.h. alle Userprofile
ausser dem Admin, dem Tester, dem Default User und dem All Users sollen gelöscht werden.

Ich dachte eigentlich dass der unten beschriebene Code das machen würde. Wirklich kapieren
was das Script tut, weiss ich aber auch nicht. Kann mir da mal jemand auch die Sprünge helfen?

01.
FOR /F "Delims= Tokens=1*" %%a IN ('DIR /B "%systemdrive%\Dokumente und Einstellungen\"') DO ( 
02.
IF /I NOT "%%a"=="Default User" FOR /F "Delims= Tokens=1*" %%b IN ('ECHO %%a') DO ( 
03.
IF /I NOT "%%a"=="All Users" FOR /F "Delims= Tokens=1*" %%c IN ('ECHO %%a') DO ( 
04.
IF /I NOT "%%a"=="Tester" FOR /F "Delims= Tokens=1*" %%c IN ('ECHO %%a') DO ( 
05.
IF /I NOT "%%a"=="Administrator" RD /s /q "%systemroot%\Dokumente und Einstellungen\%%a" >> %LogPath%\Reboot.log 
06.
07.
08.
09.
delprof.exe /Q /I
thx
Casper2k
Mitglied: Dani
28.12.2007 um 12:03 Uhr
Hi Casper,
war das Script wirklich so oder hast du dich schon dran versucht. Also wenn das Profile löschen soll, dann fress ich ein Besen. Erstmal hat die Variable "systemroot" da gar nicht verloren, denn die hat den Wert "C:\Windows", somit schon mal ganz falsche Spur.

Für was die Schleifen, hinter jeder Abfrage sinnvoll sein soll, kapiere ich auch noch nicht ganz. Denn eigentlich wird das mit der IF-Abfrage erschlagen.

Hier mal Script (leicht verändert):
01.
@echo off 
02.
 
03.
for /f "delims=" %%a in ('dir /b "%systemdrive%\Dokumente und Einstellungen\"')do ( 
04.
	if /i "%%a" NEQ "Default User" ( 
05.
		if /i "%%a" NEQ "All Users" ( 
06.
			if /i "%%a" NEQ "Tester" ( 
07.
				if /i "%%a" NEQ "Administrator" echo /s /q "%systemdrive%\Dokumente und Einstellungen\%%a" >> c:\Reboot.log 
08.
09.
10.
11.
)
Biber würde sowas als Onliner schreiben, nicht war? Er schaut bestimmt noch vorbei....

Für was die delprof.exe da sein soll, darfst micht nicht fragen. Vom Namen her, würde ich sagen "Profil löschen". Jedoch würde das kein Sinn machen, da "rd" das schon macht.


Grüße
Dani
Bitte warten ..
Mitglied: Casper2k
28.12.2007 um 13:20 Uhr
Hallo und danke für deine Antwort.

ich blick da auch nicht ganz durch.

delprof kommt von M$ und löscht inaktive Profile raus. Das ist kein Problem.

Ich möchte aber eigentlich erreichen dass alle Userprofile gelöscht werden
ausser die genannten. alles andere soll einfach weggelöscht werden.
ich denke das es mit rd nicht funktioniert, da die ntuser.dat usw teilweise noch
im zugriff sind und nicht einfach so weggelöscht werden können.
Bitte warten ..
Mitglied: Dani
28.12.2007 um 13:33 Uhr
Hi,
Ich möchte aber eigentlich erreichen dass alle Userprofile gelöscht werden
ausser die genannten. alles andere soll einfach weggelöscht werden.
Dies geschieht mit meinem Script oben. "rd" funktioniert sehr gut damit....ich habe nämlich außvversehen meine anderen User damit abgeschlossen. *g*

Wann soll das Script ausgeführt werden bzw. wo? Domäne oder Arbeitsgruppe beim Starten oder Abmelden, etc...Fragen über Fragen.


Grüße
Dani
Bitte warten ..
Mitglied: Casper2k
28.12.2007 um 14:04 Uhr
Wann soll das Script ausgeführt werden
bzw. wo? Domäne oder Arbeitsgruppe beim
Starten oder Abmelden, etc...Fragen über
Fragen.



Das Script soll während der wöchentlichen Serverreboots
ablaufen.
Hab schon ein Wartungsscript welches unterschiedlichste
Dinge aufräumt und die Profil Geschichte soll da eben auch
noch mit rein. Die Server um die es sich handelt, sind alles
W2k3 mit Citrix PS3.
Es sollen jedoch nur die lokal gespeicherten Profilpfade gelöscht
werden (bis auf die Ausnahmen).
Bitte warten ..
Mitglied: Dani
28.12.2007 um 14:18 Uhr
Na also, dann kommt dir die ntuser.dat nicht in die Gwehre. Denn beim Restart, ist ja keiner der User schon mal angemeldet gewesen. Es sollte eben mit Adminrechten laufen bzw. unter einem Adminkonto. Sonst wird das nichts....!


Grüße
Dani
Bitte warten ..
Mitglied: Casper2k
28.12.2007 um 17:59 Uhr
Das Script wird nach dem Neustart per Autoexnt ausgeführt...
aber das sollte eigentlich hinhauen. ich teste das nächste woche
mittwoch mal...
Bitte warten ..
Mitglied: Biber
29.12.2007 um 12:44 Uhr
Moin Casper2k,

ich schließe mich Danis Ausführungen an - das Skript ganz oben ist Blödsinn bzw. zu umständlich.

Folgende drei Varianten bringen das gewünsche Ergebnis (auf den Monitor statt in ein Logfile, kann also gefahrlos getestet werden):
01.
@for /f "delims=" %%a in ('dir /b /ah /ad "%USERPROFILE%\..\*"') do @( 
02.
       if /i "%%a" NEQ "Default User" ( 
03.
		if /i "%%a" NEQ "All Users" ( 
04.
			if /i "%%a" NEQ "Tester" ( 
05.
				if /i "%%a" NEQ "Administrator" echo [1]rd /s /q "%USERPROFILE%\..\%%a"  
06.
07.
08.
09.
10.
 
11.
@for /d %%a in ("%ALLUSERSPROFILE%\..\*") do @( 
12.
       if /i "%%~nxa" NEQ "Default User" ( 
13.
		if /i "%%~nxa" NEQ "All Users" ( 
14.
			if /i "%%~nxa" NEQ "Tester" ( 
15.
				if /i "%%~nxa" NEQ "Administrator" echo [2]rd /s /q "%ALLUSERSPROFILE%\..\%%~nxa"  
16.
17.
18.
19.
20.
 
21.
@for /f "delims=, tokens=1-4" %%i in (""Default User","All Users","Tester","Administrator"") do @( 
22.
   @for /d %%a in ("%ALLUSERSPROFILE%\..\*") do @( 
23.
       if /i "%%~nxa" NEQ %%i ( 
24.
		if /i "%%~nxa" NEQ %%j ( 
25.
			if /i "%%~nxa" NEQ %%k ( 
26.
				if /i "%%~nxa" NEQ %%l echo [3]rd /s /q "%ALLUSERSPROFILE%\..\%%~nxa"  
27.
28.
29.
30.
31.
)
Anmerkungen:
- Variante [1] wäre die einzige, bei der Du das Profil "Default User" überhaupt durch die FOR-Anweisung erwischt.
Denn "Default User" ist ein "verstecktes" Verzeichnis und wird weder beim normalen "Dir /a:d" noch bei einer FOR/D-Anweisung mit ausgegeben.
Erst der Zusatzschalter "DIR ../a:h" zieht auch dieses Verzeichnis/Profil mit an.
- Ich habe bei allen Varianten RELATIV gearbeitet - auf der Parallelebene von %USERPROFILE% oder %ALLUSERSPROFILE%. Ist mir lieber.
- die dritte Variante ist nicht kürzer, aber IMHO wartbarer - ich habe die Ausnahme-Profile im Blick.
- wie geschrieben, die Prüfung auf "..NEQ "Default User" ist bei [2] und [3] Wunschdenken. Dieses Profil siehst Du nicht.
- Zu ergänzen wäre aus meiner Sicht aber noch als 5. Profil das eigene, also "%username%". Das würde ich gern behalten.

Grüße
Biber
Bitte warten ..
Mitglied: Casper2k
02.01.2008 um 08:05 Uhr
ok, ich denke

@for /f "delims=, tokens=1-4" %%i in (""Default User","All Users","Tester","Administrator"") do @(
@for /d %%a in ("%ALLUSERSPROFILE%\..\*") do @(
if /i "%%~nxa" NEQ %%i (
if /i "%%~nxa" NEQ %%j (
if /i "%%~nxa" NEQ %%k (
if /i "%%~nxa" NEQ %%l echo [3]rd /s /q "%ALLUSERSPROFILE%\..\%%~nxa"
)
)
)
)
)

ist das richtige für mich.


Verstehe ich das richtig, dass in der ersten Klammer (da wo auch Tester steht) die Ausnahmen definiert werden?

Was ich allerdings nicht ganz verstehe, was macht die Variable %ALLUSERSPROFILE%\..\%%~nxa ? Müsste doch eigentlich if /i "%%~nxa" NEQ %%l echo [3]rd /s /q "C:\Dokumente und Einstellungen\%%~nxa" heißen, oder?

cu
Casper
Bitte warten ..
Mitglied: Biber
02.01.2008 um 08:33 Uhr
Moin Casper2k,

Verstehe ich das richtig, dass in der ersten Klammer (da wo auch Tester steht) die Ausnahmen definiert werden?
Jepp, exakt. Deshalb ist mir die auch am sympathischsten. Siehe oben, da habe ich geschrieben: "die dritte Variante ist nicht kürzer, aber IMHO wartbarer - ich habe die Ausnahme-Profile im Blick."

Was ich allerdings nicht ganz verstehe, was macht die Variable %ALLUSERSPROFILE%\..\%%~nxa?

Hmmja, das ist vielleicht einfacher am CMD-Prompt nachzuspielen als zu erklären...
[OT]Normalerweise hätte ich jetzt "nachzukaspern" geschrieben, aber in Anbetracht Deines Nicks...**gg [/OT]

Also, lass Dir am CMD mit "set ALLUSERS" mal den Variablenwert von %ALLUSERSPROFILE%" anzeigen.
Vorgeplänkel I:
01.
>set allusers 
02.
ALLUSERSPROFILE=C:\Dokumente und Einstellungen\All Users
Vorgeplänkel II
In der Laufvariablen %%a stehen nacheinander alle gefundenen Ordnernamen (mit Lw+Pfad+Ordnername), die auch bei einem
01.
>dir /b "%allusersprofile%\..\*"
...gefunden worden wären.
Von diesen Ordnern will ich aber NUR die OrdnerNAMEN ( also %%~na) statt die Ordner-Lw+Ordner-Pfad+Ordnernamen, die ich mit %%a erhalten würde.
Denn diese Ordnernamen will ich ja mit "Administrator"/"Tester" etc. vergleichen können.

Wenn es noch nicht ganz klar ist, dann lass den Batch-Einzeiler mal laufen OHNE die ganzen "@", die die Anzeige unterdrücken. Dann kannst Du die ganzen aufgelösten Variablenwerte sehen.
Müsste doch eigentlich if /i "%%~nxa" NEQ %%l echo [3]rd /s /q "C:\Dokumente und Einstellungen\%%~nxa" heißen, oder?
Hmmm... heißt es auch ...eigentlich.... aber "...%ALLUSERSPROFILE%\..\%%~nxa " ist ein bisschen universeller...

Grüße
Biber
Bitte warten ..
Mitglied: Casper2k
02.01.2008 um 08:42 Uhr

> Was ich allerdings nicht ganz verstehe,
was macht die Variable
%ALLUSERSPROFILE%\..\%%~nxa?

Also, lass Dir am CMD mit "set
ALLUSERS" mal den Variablenwert von
%ALLUSERSPROFILE%" anzeigen.
Vorgeplänkel I:
01.
>set allusers 
02.
> ALLUSERSPROFILE=C:\Dokumente und 
03.
> Einstellungen\All Users 
04.
> 
Vorgeplänkel II
In der Laufvariablen %%a stehen nacheinander
alle gefundenen Ordnernamen (mit
Lw+Pfad+Ordnername), die auch bei einem
01.
>dir /b 
02.
> "%allusersprofile%\..\*" 
03.
> 
...gefunden worden wären.
Von diesen Ordnern will ich aber NUR die
OrdnerNAMEN ( also %%~na) statt die
Ordner-Lw+Ordner-Pfad+Ordnernamen, die ich
mit %%a erhalten würde.
Denn diese Ordnernamen will ich ja mit
"Admistrator"/"Tester"
etc. vergleichen können.


Ah ich dachte dass da im Ordner ALL Users dann nach den
restlichen Profil-Ordnern gesucht wird... Vor allem weil du ja auch
noch \..\ zwischen %ALLUSERSPROFILE% setzt...
Teste das Ganze gerade noch mit mehreren Usern...
Bitte warten ..
Mitglied: Casper2k
02.01.2008 um 08:49 Uhr
Alles klar, passt alles!

DANKEEEEE
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Netzwerkmanagement
gelöst Macht eine VPN Verbindung in eine DMZ sinn? (7)

Frage von M.Marz zum Thema Netzwerkmanagement ...

SAN, NAS, DAS
Storage RAID LUN Konfiguration - Wie macht ihr es (3)

Frage von Marco-83 zum Thema SAN, NAS, DAS ...

Batch & Shell
Script zum Auflösen einer Ordnerstruktur und zurück gesucht (12)

Frage von websolutions zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...