84075

lokales Batch Skript einmalig ausführen

hallo,

habe ein Frage. Ich habe ein Batch Skript das beim ausliefern eines Rechners ausgeführt werden soll aber nur einmalig und vom User selber. Es verbindet einen Netzwerkdrucker mit dem Rechner.

Per Logon Skript auf dem Netlogon Server würde ich es nicht machen da ich so für jeden User ein Startup Skript einrichten müsste. Hatte mir zuerst gedacht das ich es unter Documetns an Settings unter All Users im Startmenü ablegen soll?!?!? Dann sollte das Skript aber nur beim Erststart des Users ausgeführt werden, danach nicht mehr.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 127903

Url: https://administrator.de/forum/lokales-batch-skript-einmalig-ausfuehren-127903.html

Ausgedruckt am: 19.05.2025 um 13:05 Uhr

60730
60730 26.10.2009 um 11:06:39 Uhr
Goto Top
Servus,

dazu gibt es (wie immer) viele Möglichkeiten.

Einer wäre - das script im Run Once abzulegen.

Ein anderer wäre - ein Flag in einer Datei zu hinterlegen - wenn Flag da - dann nix machen -wenn nicht ausführen.

Das hätte den Vorteil - wird der Netzwerkdrucker geändert / ein zweiter kommt dazu - würde wieder alles automatisch laufen.

btw: Startupscript brauchts beim Netzwerkdrucker nicht. Das "kann" das normale Loginscript.

Und wenn dir das nicht weiterhilft - poste dein Script und wir können dir gezielt weiterhelfen.
Gruß
84075
84075 26.10.2009 um 11:13:21 Uhr
Goto Top
also das mit dem FLAG hört sich gut an. Wie mache ich das? Wenn ein User sich anmeldet wird folgendes kommando in einer batch ausgeführt:

rundll32 printui.dll,PrintUIEntry /q /in /n \\DRUCKERSERVER\DRUCKER
60730
60730 26.10.2009 um 11:23:31 Uhr
Goto Top
Servus,

find /i "%username%,Drucker" "\\server\freigabe\drucker.log" && goto end  
rundll32 printui.dll,PrintUIEntry /q /in /n \\DRUCKERSERVER\DRUCKER
echo Drucker wird auf %computername% installiert
echo %username%,Drucker>>"\\server\freigabe\drucker.log"   
:end

Wobei Du am besten "Drucker" gegen einen Sinnigen Namen tauschst und \\server\freigabe - eh klar ist.

Gruß
84075
84075 26.10.2009 um 11:37:00 Uhr
Goto Top
eine drucker.log besteht nicht auf dem server und ich kann da auch keine anlegen...
kannst mir die erste und 4. zeile erklären?
Larz
Larz 26.10.2009 um 11:41:37 Uhr
Goto Top
Hallo ,

Zeile eins sucht in einer (als vorhanden angenommenen) Log-Datei, ob der User diesen Drucker bereits verbunden hat. Wenn ja, wird das Script beendet.
Zeile vier Trägt eben in diese Log-Datei ein, wenn der Drucker installiert/verbunden wurde. So wird Zeile eins beim nächsten Durchlauf den Drucker finden und nicht erneut versuchen zu verbinden.
Also eigentlich nur der Versuch, das ganze zentral abzuprüfen. Theoretisch wäre es auch möglich, diese Log-Datei lokal anzulegen.

Gruß
Lars
84075
84075 26.10.2009 um 12:10:07 Uhr
Goto Top
also das ist ja genau das was ich benötige nur ist eben das Problem das wir auf dem Druckerserver keine Berechtigung habenface-sad Kann ich denn die Log-Datei auf meinen Admin-PC ablegen? Dieser ist auch i.d.R immer online und somit immer für die Clients erreichbar?
Wie kann ich denn das Skript so umbauen damit er auf meinem Server nach der LogDAtei sucht und abprüft?
bennib22
bennib22 26.10.2009 um 12:26:23 Uhr
Goto Top
Hi,
erstell doch einfach einen geplanten Task und gib denn an "einmalig ausführen".

Gruß
bennib22
84075
84075 26.10.2009 um 12:41:41 Uhr
Goto Top
mensch wieso komm ich nicht selber auf diese ideeface-smile))
Larz
Larz 26.10.2009 um 12:50:33 Uhr
Goto Top
Die andere Variante ist aber eleganter, die Batch kannst Du so dann jederzeit erweitern/umbauen wie Du sie evtl. in der Zukunft brauchst. Den Geplanten Task müsstest Du JEDES MAL NEU anlegen. Umbauen auf deinen Admin-PC sollte kein Problem sein, so lange Du eine Freigabe hast, wo die Benutzer lesen & schreiben dürfen, also z.B.:

find "%username%,Drucker" "\\DeinComputer\Freigabename\drucker.log" && goto end  
rundll32 printui.dll,PrintUIEntry /q /in /n \\DRUCKERSERVER\DRUCKER
echo Drucker wird auf %computername% installiert
echo %username%,Drucker>>"\\DeinComputer\Freigabename\drucker.log"   
:end

Gruß
Larz
84075
84075 26.10.2009 um 13:26:18 Uhr
Goto Top
hallo!

vielen Dank....das funktioniert insoweit recht gut. Nur habe ich das Problem wenn ich mich dann vom Client wieder abmelde und beim nächsten mal anmelde der Drucker weg ist.....Erst wenn ich den Eintrag aus der log entferne und nochmals neu starte ist er wieder drin....
bennib22
bennib22 26.10.2009 um 13:32:34 Uhr
Goto Top
Hi,
wenn ich das richtig verstanden habe könntest du auch die Batchdatei in den Autostart verlegen.

(ich hoff das hilft dir)face-wink

mfG
bennib22
84075
84075 26.10.2009 um 13:35:10 Uhr
Goto Top
also das mit dem ausführen der batch ist geregelt. Hänge das Batch auf Dokumente und Einstellugnen\All Users\Startmenue\autostart. Wird also bei jedem User ausgeführt. Nur wenn ich das erstmalig mache fügt er auch den Netzwerkdrucker hinzu und trägt ihn auf den Admin Rechner in die log. Schön und gut bis hierher. Nur wenn ich den Rechner wo der Drucker installiert worden ist mit dem gleichen User nochmals neu starte ist der drucker aber wieder weg. ERst wenn ich den eintrag aus der log entferne und wieder neustarte fügt er ihn wieder hinzu
60730
60730 26.10.2009 um 13:54:50 Uhr
Goto Top
Stop...

lege mal einen x beliebigen Link /textdatei auf den desktop
melde dich ab
melde dich an.

zu 99.9999% ist der "link/textdatei" auch weg?

Ihr habt ein Problem mit den Userprofilen - oder benutzt Mandatory profiles ?


Gruß
84075
84075 26.10.2009 um 15:28:44 Uhr
Goto Top
natürlich hat es am Profil gelegenface-smile))))))) war wohl so voll das er das Profil nicht laden konnte und sich nur temporär angemeldet hat! Jetzt klappt es auch und die drucker bleiben installiert. Auch die log-datei sieht gut aus...Mal ne Frage. Was müsste gemacht werden wenn ich in einer csv Datei die usernamen drin stehen habe und mein skript diese csv zuerst ausliest überprüft wer sich angemeldet hat und anhand der liste dem user seine drucker installiert???

also...
1. User meldet sich mit xyz123 an
2. skript überprüft in der drucker.csv welche drucker der user xyz123 benötigt
3. skript installiert ihm diese

beispiel der drucker.csv datei:

USER---------DRUCKER
xyz123-------dr123, dr436, dr090
xyz456--------dr665, dr432, 998
xyz789-------dr509, dr421, dr555, dr780
bastla
bastla 26.10.2009 um 22:19:05 Uhr
Goto Top
Hallo cyancy!

Wenn Du die Steuerdatei so gestaltest:
xyz123,dr123,dr436,dr090
xyz456,dr665,dr432,998
xyz789,dr509,dr421,dr555,dr780
könnte der Batch dazu so aussehen:
for /f "tokens=1* delims=," %%i in ('findstr /i /b "%username%" "\\DeinComputer\Freigabename\Drucker.csv"') do for %%a in (%%j) do findstr /i "%username%,%%a" "\\DeinComputer\Freigabename\drucker.log">nul || (  
    rundll32 printui.dll,PrintUIEntry /q /in /n \\DRUCKERSERVER\%%a
    echo Drucker %%a wird auf %computername% installiert
    echo %username%,%%a >>"\\DeinComputer\Freigabename\drucker.log"  
)
Grüße
bastla
84075
84075 27.10.2009 um 10:02:17 Uhr
Goto Top
hey bastla!!!! SUUUPER vielen DANK, funktioniert natürlich einwandfrei!!!

was ich gemerkt habe ist, das wenn der User seinen Drucker manuell löschen sollte und beim nächsten neustart dann dies nicht bemerkt wird-es wird der drucker nicht nachinstalliert da in der log datei noch steht das er bereits installiert wurde. kann man hier bei der anmeldung einen vergleich zwischen log datei und den installierten drucker erstellen? und wenn drucker nicht mehr installiert sein sollte er trotzdem nochmal installiert wird?
bastla
bastla 28.10.2009 um 08:48:38 Uhr
Goto Top
Hallo cyaency!

Mit einem kleinen (vom Batch selbst erzeugten) VBScript könntest Du die Drucker etwa so auflisten und bei Bedarf installieren lassen (der Eintrag in die "drucker.log" ist dann ja eigentlich überflüssig, aber zu Dokumentationszwecken kannst Du ihn trotzdem verwenden - dann aber vielleicht besser noch mit Angabe eines Timestamps):
set L=%temp%\ListPrinters.vbs
>%L% echo Set Printers=WScript.CreateObject("WScript.Network").EnumPrinterConnections:For i=1 To Printers.Count Step 2:WScript.Echo Printers.Item(i):Next  

for /f "tokens=1* delims=," %%i in ('findstr /i /b "%username%" "\\DeinComputer\Freigabename\Drucker.csv"') do for %%a in (%%j) do cscript //nologo %L%|findstr /i "%%a">nul || (  
    rundll32 printui.dll,PrintUIEntry /q /in /n \\DRUCKERSERVER\%%a
    echo Drucker %%a wird auf %computername% installiert
    echo %date:~-4%-%date:~-7,2%-%date:~-10,2% %time:~,8% %username%,%%a >>"\\DeinComputer\Freigabename\drucker.log"  
)
Grüße
bastla
stweber
stweber 01.12.2009 um 19:00:39 Uhr
Goto Top
Hallo Bastla

Sehr tolles Script! Vielen Dank. Noch eine Frage, könnte man den Standarddrucker auch gleich setzten?

z. B. den 1 Drucker im CSV?

Gruss

Stephan
Biber
Biber 01.12.2009 um 19:15:21 Uhr
Goto Top
<OT>
@bastla
Gib doch dem jungen Nachwuchstalent bitte ein paar Minuten, seine letzte gestellte Frage kurz nachhallen zu lassen.

Vielleicht kommt ja gleich noch ein "Hmmm, ich könnte ja einen weiteren Parameter in der CSV-Datei einführen.."
... oder ein "Ich mache mal was Verrücktes und benutze die Forumssuche..."
... oder ein "Dafür sollte ich einen neuen Beitrag aufmachen..."

Nur ein paar Minuten...

Grüße
Biber
P.S. @stweber
Hast du in letzter Zeit mal die Überschrift dieses Beitrags mit der jetzt aktuellen Fragestellung verglichen?
</OT>
bastla
bastla 01.12.2009 um 21:04:37 Uhr
Goto Top
[OT]
@Biber
Gib doch dem jungen Nachwuchstalent bitte ein paar Minuten
Dir kann ich ja keinen Wunsch abschlagen ...

... und ich lege sogar noch ein paar Tage drauf. face-wink

Grüße
bastla
[/OT]