erde0815
Goto Top

Einrichtung eines Users für eine Software per Batch

Es sollen Daten kopiert, verändert werden ein paar Netzlaufwerke geused aber irgendwie steckt der Wurm drin.

Hi Folkz,

ich hoffe ihr könnt mir helfen ich wollte für mich und meine Kollegen als Arbeitserleichterung eine Dosbatch schreiben um eine im Hause gebräuchliche Software für den User einzurichten. Die Software kommt gefühlt aus dem Jahre Anno Domini und ist eine 16bit Anwendung.

Mein Script sieht wie folgt aus, wenn mir jemand nen Tip geben könnte was ich falsch mache wäre ich sehr dankbar.
Ich gehe von folgenden Gegebenheiten aus:

REM * 1) Programm-Daten liegen unter \\Servername\Ver\zeich\nis\zum\programm\Nachname
REM * 2) Programm-Daten kopieren von \\Servername\Ver\zeich\nis\zum\programm\default
REM * 3) Der Benutzer muss im Active Directory bereits exsistieren!
REM * 4) Der Scriptstarter ist ein Admin
REM * 5) Auf dem Netzlaufwerk H:\ muss als ein spezielles share aus dem login geused sein!
REM * 6) Der Laufwerksbuchstabe R:\ darf nicht in Verwendung sein.

:nochmal
cls
ECHO.
ECHO ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
ECHO º Begruessungs bla bla mit Scriptfunktion º
ECHO ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ECHO.
ECHO.
ECHO Der einzugebende Benutzer muss im AD bereits angelegt sein.
ECHO.
SET /P vorname= Bitte den Vornamen eingeben:
ECHO.
SET /P nachname= Bitte den Nachnamen eingeben:
ECHO.
ECHO Sind die Eingaben so richtig?
ECHO -----------------------------
REM bei fehlender Eingabe halten die Variablen den Wert der Ausführung vorher, lol.
ECHO Vorname '%vorname%' ohne ''
ECHO.
ECHO Nachname '%nachname%' ohne ''
REM [todo] Nachname darf nicht laenger als 8 Zeichen sein sonst abschneiden, aber wie?
Rem ==================================================================================
ECHO.
ECHO Eingaben korregieren?
REM Hier habe ich mal die alte CHOICE-Funktion nachgebaut.
REM ------------------------------------------------------
SET /P X= [J]a oder [N]ein?
IF /I "%X%"=="J" goto :nochmal
ELSE IF /I "%X%"=="255" goto:EOF

@echo Off
cls
REM Datenkopieren
REM -------------
cd H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3
NET GROUP gruppenname domäne\%vorname%.%nachname% /add
REM funktioniert nicht richtig
REM ==========================
mkdir H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%
ECHO.
ECHO.
ECHO ... kopiere Dateien, einen Moment bitte ...
xcopy /E /C /H H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\default H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\ >Nul
IF EXIST H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\ (
IF EXIST H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\name~1 (
IF EXIST H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\name~2 (
ECHO Kopieren des Benutzerverzeichnises auf H: erfolgreich. :-]
ECHO.
)
)
)
REM Shortcuts anpassen
REM ------------------
NET R: /DELETE >Nul
NET USE R: \\server\NETLOGON\usw\usw\ /user:admin passwort /persistent:no >Nul


SET n=0
R:\SHORTCUT.EXE -c H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\name~1\FEHLER~1.LNK -t H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\ZZERROR.HLP -d H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\ -i H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\HILFE1.ICO
IF EXIST H:\Verzeichnisse1\Verzeichnisse2\Verzeichnisse3\%nachname%\name~1\FEHLER~1.LNK (
ECHO "Verknuepfung Fehler Hilfe wurde erfolgreich angelegt und bearbeitet. :-]"
SET /a n=%n%+1
)

REM 3 weitere Shortcuts werden auf diese weise bearbeitet.
REM ------------------------------------------------------

NET R: /DELETE >Nul
ECHO.
ECHO Es wurden %n% von 4 Verknuepfungen bearbeitet und angelegt.
ECHO.

REM Verknuepfungen zum Userrechner kopieren (?)
REM -------------------------------------------
ECHO.
ECHO "Soll der Ordner mit den Verknuepfungen gleich auf den Desktop"
ECHO "des Anwender-PC kopiert werden?"
ECHO.
ECHO.

SET /P Z= [J]a oder [N]ein?
IF /I "%Z%"=="J" (
ECHO.
SET /P rechner= Bitte den Rechnernamen eingeben:
ECHO.
NET USE R: \\%rechner%\c$\DOKUME~1\%vorname%.%nachname%\Desktop /user:admin passwort /persistent:no >Nul
xcopy /E /C /H H:\Verzeichnis1\Verzeichnis2\Verzeichnis3\%nachname%\name~1\ R:\ >Nul
IF EXIST R:\name~1\ (
IF EXIST R:\name~1\FEHLER~1.LNK (
IF EXIST R:\name~1\test.LNK (
IF EXIST R:\name~1\HILFEZ~1.LNK (
IF EXIST R:\name~1\test2.LNK (
ECHO.
ECHO "Alle Dateien wurden erfolgreich zum Anwender-PC kopiert. face-smile"
ECHO.
)
)
)
)
)
ELSE (
ECHO.
ECHO "Die Dateien konnten nicht zum Anwender-PC kopiert werden. face-sad"
ECHO "mögliche Fehlerursachen: (1) Der Rechner ist nicht an oder (2) der Anwender war dort noch nicht angemeldet."
ECHO.
)
NET R: /DELETE >Nul
)

REM Dann moechte ich eine Datei schreiben, jedoch bricht dies bei folgender Zeile ab und
REM ich weiß nicht was und wie ich es escapen soll.
REM -------------------------------------------------------------------------------------
ECHO Filter=Microsoft Access (*.$$$)|*.$$$|Alle Dateien (*.*)|*.*| >>H:\Verzeichnis1\Verzeichnis2\Verzeichnis3\%nachname%\name.INI
REM wenn ich die Zeile auskommentiere laufen alle Zeilen zum Dateischreiben durch.
REM ------------------------------------------------------------------------------
IF EXIST H:\Verzeichnis1\Verzeichnis2\Verzeichnis3\%nachname%\name.INI (
ECHO.
ECHO "name.INI wurde erfolgreich angelegt. face-smile"
ECHO.
)
ELSE (
ECHO.
ECHO "name.INI wurde konnte nicht angelegt werden. face-sad"
ECHO.
)
:EOF
REM Ausgabe
REM =======
IF /I "%X%">="0" ECHO "Ein Fehler ist aufgetreten die Batchausfuehrung wird beendet. face-sad"

Ich hoffe ich konnte meine Probleme mit den Kommentaren verdeutlichen und bitte um Verständnis, dass ich die konkreten Dateinamen und Benutzer und Passwörter entfremdet habe. Seltsamerweise scheine ich ein generelles Problem mit Net Use und Net delete zu haben sowie die Net Group sache obwohl ich dermaßen viele Anleitungen gewälzt habe. Was Dosbatches angeht bin ich noch sehr am Anfang


Danke fürs Lesen
Gruß Erde

Content-Key: 99167

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

Printed on: April 24, 2024 at 22:04 o'clock

Mitglied: 51705
51705 Oct 13, 2008 at 19:27:23 (UTC)
Goto Top
Hallo Erde,

an der Stelle:

Auf dem Netzlaufwerk H:\ muss als ein spezielles share aus dem login geused sein!

hab ich aufgehört zu lesen, was meinst du damit?

Grüße, Steffen
Member: bastla
bastla Oct 13, 2008 at 19:47:05 (UTC)
Goto Top
Hallo erde0815!

Vorschläge zu einigen Details (unter der Annahme, dass es auch ein CMD-Batch sein darf):
REM bei fehlender Eingabe halten die Variablen den Wert der Ausführung vorher, lol.
... was sich durch ein vorangestelltes zwangloses
set vorname=
set nachname=
recht gut verhindern lässt.

Ob dann überhaupt etwas eingegeben wurde, kannst Du zB mit
if not defined vorname echo Kein Vorname eingegeben! & goto :nochmal
überprüfen und behandeln.

REM [todo] Nachname darf nicht laenger als 8 Zeichen sein sonst abschneiden, aber wie?
set "nachname=%nachname:~,8%  

IF /I "%X%"=="J" goto :nochmal
Etwas sicherer wäre:
IF /I "%X:~,1%"=="J" goto :nochmal  
In Kombination mit dem Abbruch per Eingabe "255" etwa so:
IF /I "%X:~,1%"=="J" (goto :nochmal) ELSE (IF "%X%"=="255" goto :Ende)  
Das Sprungziel ":eof" steht in Batch generell für "Ende" (des Batches oder eines per "call" aufgerufenen internen Unterprogrammes), auch wenn eine entsprechende Sprungmarke nicht existiert, und sollte daher hier durch zB ":Ende" ersetzt werden.

Gleich zur entsprechenden Stelle:
IF /I "%X%">="0" ECHO "Ein Fehler ist aufgetreten die Batchausfuehrung wird beendet. face-sad"
ließe sich zwar so schreiben:
IF %X% gtr 0 ECHO "Ein Fehler ist aufgetreten, die Batchausfuehrung wird beendet. :-("  
allerdings wird die Variable "X" ja nirgendwo auf den Wert 0 gesetzt, sodass hier immer ein Fehler gemeldet würde - insofern solltest Du das nochmals überdenken ...

NET R: /DELETE >Nul
sollte besser lauten:
NET USE R: /DELETE >NUL

REM ich weiß nicht was und wie ich es escapen soll.
ECHO Filter=Microsoft Access (*.$$$)|*.$$$|Alle Dateien (*.*)|*.*| >>H:\Verzeichnis1\Verzeichnis2\Verzeichnis3\%nachname%\name.INI
ECHO Filter=Microsoft Access (*.$$$)^|*.$$$^|Alle Dateien (*.*)^|*.*^| >>H:\Verzeichnis1\Verzeichnis2\Verzeichnis3\%nachname%\name.INI
Grüße
bastla

P.S.: Sieh Dir bitte einmal an ...
Member: erde0815
erde0815 Oct 14, 2008 at 07:36:49 (UTC)
Goto Top
vielen Dank bastla, deine Tips haben für mich etwas Licht ins dunkle gebracht, ich denke damit komme ich weiter, wenn ich fertig bin kann ich bei interesse gern mein Script hier posten. face-smile
Member: erde0815
erde0815 Oct 31, 2008 at 17:20:22 (UTC)
Goto Top
So ich bin einen riesen Satz weitergekommen mit meiner Batch und habe schmerzlich bemerkt, dass Leerzeichen in alten INI's eine Menge unheil anrichten können und der Fehler schwer zu jagen ist, zumindest beim ersten Mal. face-wink
Auch konnte ich mit Freude das "Feature" der verzögerten Variablenbefüllung bewundern, das es neu unter XP gibt.

Aber alle Hürden zum Trotz läuft es in der Grundversion. :D
Jetzt würde ich es noch gern etwas pimpen, dafür bräuchte ich etwas Rat bzw. Kritik.
1) Ich möchte gern in meiner Fehlerausgabe am Ende des Anlegungsprozesses entsprechendes Anmerken, wenn das Aufnehmen des Users in die Gruppe nicht hingehauen hatt. Ich verwende den Befehlt

NET GROUP Gruppenname %vorname%.%nachname% /ADD /DOMAIN 2>Nul>Nul

in meiner Batch. Wie sind die Errorlevel dafür und werden diese auch zuverlässig gesetzt? Ich möchte das gern in eine Variable umleiten und am Ende auf Grund der Variable eine Ausgabe machen.

2) Ich würde gern meine Erzeugten Shortcuts *stolzIst* dem Anwender auf den Desktop kopieren. Dafür benutze ich eine Tastatureingabe mit SET /P für den Rechnernamen außerhalb jeglicher Schleifen man lernt ja dazu. face-wink
Dann würde ich gern nen Verbindungstest machen, ich dachte an ping, und wenn der 10x sauber durchgeht möchte ich dem User mit xcopy den Kram auf den Desktop jauchen. An der Stelle mit dem Verbindungstest komme ich nicht weiter. Hat da jemand ne gute Idee?

SET /P rechner= Bitte den Rechnernamen eingeben:
ping /n 10 %rechner% 2>NUL>NUL && goto:cpShortc

Irgendwie ist da aber noch der Wurm drin weil mir nicht ganz einleuchtet wie ich das da mit dem Errorcode machen muß. Ach ja das Label _cpShortc kopiert den Shortcut.

Zum Shortcut erzeugen habe ich Shortcut [Version 1.11] von OptimumX.com/ entdeckt ich finde es ist wesentlich zuverlässiger als sein alter Vorgänger aus dem M$ Ressourcekit.

Schönes We und schönes Helloween euch allen face-smile
Member: bastla
bastla Oct 31, 2008 at 17:41:05 (UTC)
Goto Top
Hallo erde0815!

Da wir in diesem Thread ja ziemlich unter uns sind (und vermutlich auch bleiben werden), böte es sich an, Deine Fragen in einen neuen Beitrag zu setzen ...

Grüße
bastla