84075
Goto Top

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.

Content-Key: 127903

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

Printed on: April 25, 2024 at 18:04 o'clock

Mitglied: 60730
60730 Oct 26, 2009 at 10:06:39 (UTC)
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ß
Mitglied: 84075
84075 Oct 26, 2009 at 10:13:21 (UTC)
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
Mitglied: 60730
60730 Oct 26, 2009 at 10:23:31 (UTC)
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ß
Mitglied: 84075
84075 Oct 26, 2009 at 10:37:00 (UTC)
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?
Member: Larz
Larz Oct 26, 2009 at 10:41:37 (UTC)
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
Mitglied: 84075
84075 Oct 26, 2009 at 11:10:07 (UTC)
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?
Member: bennib22
bennib22 Oct 26, 2009 at 11:26:23 (UTC)
Goto Top
Hi,
erstell doch einfach einen geplanten Task und gib denn an "einmalig ausführen".

Gruß
bennib22
Mitglied: 84075
84075 Oct 26, 2009 at 11:41:41 (UTC)
Goto Top
mensch wieso komm ich nicht selber auf diese ideeface-smile))
Member: Larz
Larz Oct 26, 2009 at 11:50:33 (UTC)
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
Mitglied: 84075
84075 Oct 26, 2009 at 12:26:18 (UTC)
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....
Member: bennib22
bennib22 Oct 26, 2009 at 12:32:34 (UTC)
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
Mitglied: 84075
84075 Oct 26, 2009 at 12:35:10 (UTC)
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
Mitglied: 60730
60730 Oct 26, 2009 at 12:54:50 (UTC)
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ß
Mitglied: 84075
84075 Oct 26, 2009 at 14:28:44 (UTC)
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
Member: bastla
bastla Oct 26, 2009 at 21:19:05 (UTC)
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
Mitglied: 84075
84075 Oct 27, 2009 at 09:02:17 (UTC)
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?
Member: bastla
bastla Oct 28, 2009 at 07:48:38 (UTC)
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
Member: stweber
stweber Dec 01, 2009 at 18:00:39 (UTC)
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
Member: Biber
Biber Dec 01, 2009 at 18:15:21 (UTC)
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>
Member: bastla
bastla Dec 01, 2009 at 20:04:37 (UTC)
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]