Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:windowsclient:postsync-aufgabenplanung]] 

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

anwenderwiki:windowsclient:postsync-aufgabenplanung [2013/10/10 15:59] (aktuell)
Zeile 1: Zeile 1:
 +{{tag> D}}
 +
 +
 +====== Postsync-Script kombiniert mit Aufgabenplanung ======
 +===== Automatische Installation von Netzwerkdruckern - raumweise =====
 +
 +==== Konzept: Postsync mit Aufgabenplanung mischen ====
 +
 +Mit den //​Printing_Admin_Scripts// ​ können Drucker unter Windows XP und 7 scriptgesteuert installiert werden.
 +
 +Ich habe dies so realisiert, dass ich ein batch-Script in die Aufgabenplanung aufgenommen habe, welches bei jedem Rechnerstart ausgeführt wird. Dies muss im image verewigt werden. Dieses batch-Script startet dann die Druckerinstallation. Mit diesem Mechanismus kann man eigentlich alles Mögliche nach der Syncronisation anstellen, deshalb habe ich die Scripte modularisiert. Wer nur Drucker installieren möchte kann alles auch in ein script packen.
 +
 +Abgeschaut habe ich die Grundidee vom VAMT-Konzept. ​
 +
 +Die Konfigurationsdatei und die Druckertreiber,​ etc. liegen auf dem Server und werden während des postsync auf den Windowsclient kopiert.
 +
 +Die PCs haben Namen wie r102pc03. Für dieses Namensschema wird bei jedem PC in einem Raum der entsprechende Drucker eingerichtet.
 +==== Verzeichnisse und Dateien ====
 +
 +Die folgenden Dateien und Verzeichnisse unter ''​C:​\linuxmuster''​ anlegen.
 +
 +Datei ''​C:​\linuxmuster\linbo_postsync_system.bat''​
 +
 +  @echo off & setlocal enabledelayedexpansion
 +  ​
 +  rem Diese script sollte als geplanter task nach dem Rechnerstart ausgeführt werden,
 +  rem als Benutzer pgmadmin wählen. (Als SYSTEM geht es irgendwie nicht)
 +  ​
 +  set WorkDir=C:​\linuxmuster
 +  ​
 +  rem Prozesssteuerung durch lockfiles: Das script wird nur vollständig ausgeführt,​ wenn postsync_system_todo vorhanden ist.
 +  ​
 +  set ToDo=%WorkDir%\postsync_system_todo
 +  set Doing=%WorkDir%\postsync_system_doing
 +  set Done=%WorkDir%\postsync_system_done
 +  ​
 +  rem Daten von Linuxmuster auslesen
 +  ​
 +  set raum=%COMPUTERNAME:​~0,​4%
 +  ​
 +  :main
 +      if exist "​%Done%"​ goto eof
 +      if exist "​%Doing%"​ goto error
 +      move /Y %ToDo% %Doing%
 +  ​
 +      rem
 +      rem Drucker installieren
 +      rem
 +  ​
 +      SET drucker_bat=%WorkDir%\drucker\drucker_installieren.bat
 +      SET drucker_conf=%WorkDir%\drucker\drucker.conf
 +  ​
 +      FOR /F "eol=# delims="​ %%i in (%drucker_conf%) do Call :splitline "​%%i"​
 +  ​
 +  GOTO :done
 +  ​
 +  :splitline
 +      FOR /F "​tokens= 1,2,3,4,5 delims=;"​ %%i in (%1) do set "​bla=%%i"​ & set "​ble=%%j"​ & set "​bli=%%k"​ & set "​blo=%%l"​ & set "​blu=%%m"​
 +  ​
 +      IF %raum%==%bla% call %drucker_bat% "​%ble%","​%bli%","​%blo%","​%blu%"​ >> %Doing%
 +  GOTO :eof
 +  ​
 +  ​
 +  :done
 +      move /Y %Doing% %Done%
 +  goto :eof
 +  ​
 +  ​
 +  :error
 +  echo "Es ist ein Fehler bei der Bearbeitung aufgetreten"​
 +  ​
 +  :eof
 +
 +Datei ''​C:​\linuxmuster\linbo_postsync_todo''​ ist leer und dient als Marker, dass das script noch nicht ausgeführt wurde
 +
 +Verzeichnis ''​ C:​\linuxmuster\drucker'':​ hier  Konfigurationdatei,​ Drucker_Installations_Script und Verzeichnisse mit Druckerdateien
 +
 +Datei ''​c:​\linuxmuster\drucker\drucker.conf''​ :
 +
 +  # drucker.conf:​ 5 Einträge durch Strichpunkt getrennt, ohne Leerzeichen
 +  #
 +  # Raum ; Drucker .inf-Datei und Treiber ; Name für Drucker ; Name aus .inf-Datei ; IP des Druckers
 +  #
 +  r206;​c:​\linuxmuster\drucker\HP4700;​Lehrerzimmer HP;HP Color LaserJet 4700 PCL 6;​10.16.206.240
 +  r206;​C:​\linuxmuster\drucker\Samsung;​Lehrerzimmer Samsung;​Samsung CLP-650 Series PCL 6;​10.16.206.241
 +
 +
 +Verzeichnis ''​c:​\linuxmuster\drucker\HP4700''​ mit inf- und cab-Dateien z.B für den HP LaserJet 4700
 +
 +   
 +Datei ''​c:​\linuxmuster\drucker\drucker_installieren.bat''​ :
 +
 +  @echo off
 +  ​
 +  rem dies script erwartet vier Parameter:
 +  rem %1 Pfad zum Verzeichnis mit inf-Datei und Treiber-Datei
 +  rem %2 Druckername : ist beliebig
 +  rem %3 Druckertyp : muss mit den Name in der inf-Datei übereinstimmen
 +  rem %4 IP-Adresse : Wie der drucker eingestellt ist
 +  ​
 +  rem Quelle:​http://​hamsterhirn.de/​index.php/​2011/​12/​einen-drucker-automatisiert-installieren-mit-einem-batch-skript/​
 +  rem An Linuxmuster angepasst: Helge Münnich, Merian-Schule,​ Freiburg
 +  ​
 +  echo %~1
 +  echo %~2
 +  echo %~3
 +  echo %~4
 +  ​
 +  SET InfPath=%1
 +  SET PrnName=%2
 +  SET PrnType=%3
 +  SET PortIP=%4
 +  ​
 +  systeminfo | find "​Windows 7"
 +  if %ERRORLEVEL% == 0 goto Win7
 +  ​
 +  systeminfo | find "​Windows XP"
 +  if %ERRORLEVEL% == 0 goto WinXP
 +  ​
 +  :Win7
 +  echo Running Windows 7 Script
 +  ​
 +  rem check if 32 or 64 bit
 +  Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
 +  REG.exe Query %RegQry% > C:​\Windows\Temp\checkOS.txt
 +  Find /i "​x86"​ < C:​\Windows\Temp\CheckOS.txt > C:​\Windows\Temp\StringCheck.txt
 +  ​
 +  If %ERRORLEVEL% == 0 (
 +      Echo "This is 32 Bit Win7"
 +  rem Lehrerzimmer HP
 +  cscript C:​\Windows\System32\Printing_Admin_Scripts\de-DE\prnport.vbs -a -r IP_%PortIP% -h %PortIP% -o RAW -n 9100
 +  cscript C:​\Windows\System32\Printing_Admin_Scripts\de-DE\prndrvr.vbs -a -m %PrnType% -v 3 -e "​Windows NT x86" -i %InfPath%
 +  cscript C:​\Windows\System32\Printing_Admin_Scripts\de-DE\prnmngr.vbs -a -p %PrnName% -m %PrnType% -r IP_"​%PortIP%"​
 +  ​
 +  rem Lehrerzimmer Samsung
 +  ) ELSE (
 +      Echo "This is 64 Bit Win7"
 +  )
 +  goto exit
 +  ​
 +Diese batch-Datei bietet die Möglichkeit für Windows XP bzw. für 64bit Win7 angepasste Befehle einzubauen. Die haben wir nicht - kann ich also nicht beitragen ...
 +==== Erster Test  ====
 +
 +Die Datei ''​linbo_postsync_system.bat''​ in der Eingabeaufforderung (cmd) als Administrator ausführen.
 +
 +Aus ''​postsync_system_todo''​ sollte ''​postsync_system_done''​ geworden sein. In der neuen Datei steht die Ausgabe der Druckereinrichtung evtl. mit Hinweisen zu Fehlern. Vor einem neuen Test done bzw. doing in todo umbenennen, sonst tut sich nichts.
 +
 +Der Drucker sollte nun verfügbar sein.
 +==== Aufgabenplanung einrichten ====
 +
 +In der Aufgabenplanung von Windows eine neue Aufgabe anlegen, die die Aktion ''​C:​\linuxmuster\linbo_postsync_system.bat''​ bei jedem Start ausführt.
 +
 +Eigentlich wollte ich dien Task als SYSTEM ausführen lassen, aber das geht aus irgendeinem Grund (welchen???​) für Drucker nicht nicht; bei VAMT läuft die Aufgabe als SYSTEM. Ich lasse diese Aufgabe also als pgmadmin laufen; das Passwort wird beim Anlegen einmal abgefragt und gespeichert.
 +
 +==== Zweiter Test ====
 +
 +Drucker löschen, ''​postsync_system_done''​ wieder zu todo umbenennen, Rechner neu starten. Der Drucker sollte nach einer Weile - kann nach dem Start noch ein, zwei Minuten gehen - installiert sein .
 +
 +Wenn der Test erfolgreich ist, **muss man nun von diesem Rechner ein Image anlegen**, damit die Aufgabenplanung verewigt wird. Davor kann/sollte man die Druckerdateien löschen, aber erst nachdem diese auf den Server kopiert wurden, siehe unten.
 +==== Postsync Script ====
 +
 +Zu jedem image gibt es auf dem Server unter ''/​var/​linbo''​ eine postsync-Datei ''​image.cloop.postsync''​. Meine sieht so aus:
 +
 +  # $Id: win7-reactivate.postsync 998 2011-03-10 09:23:25Z tschmitt $
 +  ​
 +  echo "##### POSTSYNC BEGIN #####"
 +  ​
 +  # Ggf. anzupassende Variablen.
 +  # cil-Datei muss unter /var/linbo auf dem Server liegen.
 +  mycil="​schule.cil"​
 +  # Zielverzeichnis auf der Betriebssystempartition.
 +  mytarget="​cil"​
 +  ​
 +  # Server-IP wird berechnet.
 +  myserverip="​$(grep ^linbo_server /​tmp/​dhcp.log | tail -1 | awk -F\' '{ print $2 }'​)"​
 +  ​
 +  # Wenn Netzwerkverbindung vorhanden ist, lade die cil-Datei in eine temporäre
 +  # Datei in den lokalen Cache herunter.
 +  if ! localmode; then
 +   echo "Lade $mycil herunter ..."
 +   rsync -L "​$myserverip::​linbo/​$mycil"​ "/​cache/​${mycil}.tmp"​
 +  fi
 +  ​
 +  # Wenn temporäre cil-Datei vorhanden ist, benenne sie um.
 +  [ -s "/​cache/​${mycil}.tmp"​ ] && mv "/​cache/​${mycil}.tmp"​ "/​cache/​$mycil"​
 +  ​
 +  # Ist cil-Datei im lokalen Cache vorhanden, kopiere sie in den Ordner $mytarget
 +  # auf der Betriebssystempartition.
 +  if [ -s "/​cache/​$mycil"​ ]; then
 +   echo "​Kopiere $mycil nach /​mnt/​$mytarget ..."
 +   mkdir -p "/​mnt/​$mytarget"​
 +   cp "/​cache/​$mycil"​ "/​mnt/​$mytarget"​
 +  fi
 +  ​
 +  # 
 +  # linuxmuster-Verzeichnis muss unter /​var/​linbo/​postsync auf dem Server liegen.
 +  # Zielverzeichnis auf der Betriebssystempartition.
 +  mytarget_dir="​linuxmuster"​
 +  ​
 +  # Wenn Netzwerkverbindung vorhanden ist, lade die Dateien in eine temporäreen
 +  # Datei in den lokalen Cache herunter.
 +  #if ! localmode; then
 +  # echo "Lade $mytarget_dir herunter ..."
 +  # rsync -rL "​$myserverip::​linbo/​postsync/​$mytarget_dir/"​ "/​cache/​${mytarget_dir}.tmp"​
 +  #fi
 +   echo "​loeschen alte Dateien"​
 +   if [ -f "/​mnt/​${mytarget_dir}/​postsync_system_todo"​ ] ; then
 +    rm "/​mnt/​${mytarget_dir}/​postsync_system_todo"​
 +   fi
 +   if [ -f "/​mnt/​${mytarget_dir}/​postsync_system_done"​ ]; then
 +    echo "​loesche alte done-Datei /​mnt/​${mytarget_dir}/​postsync_system_done"​
 +    rm "/​mnt/​${mytarget_dir}/​postsync_system_done"​
 +   fi
 +   if [ -f "/​mnt/​${mytarget_dir}/​postsync_system_doing"​ ]; then
 +    echo "​loesche alte doing-Datei"​
 +    rm "/​mnt/​${mytarget_dir}/​postsync_system_doing"​
 +   fi
 +   echo "Lade $mytarget_dir herunter ..."
 +   rsync -r "​$myserverip::​linbo/​postsync/​${mytarget_dir}/"​ "/​mnt/​$mytarget_dir"​
 +  ​
 +  ​
 +  echo "##### POSTSYNC END #####"
 +
 +Ab #​linuxmuster kommt mein Teil. Dieser Teil gleicht das Verzeichnis ''/​var/​linbo/​postsync''​ mit dem Verzeichnis ''​c:​\linuxmuster''​ auf dem Windows-Client ab und stellt sicher, dass die Todo-Datei alleine vorhanden ist. 
 +
 +D.h. man muss vorher alles von ''​c:​\linuxmuster''​ nach ''/​var/​linbo/​postsync''​ kopiern, damit es funktioniert. Genau genommen könnte man nun auch den Inhalt von ''​c:​\linuxmuster''​ löschen - ich habe nur die Treiber-Dateien gelöscht. ​
 +
 +
 +==== Dritter Test ====
 +
 +Rechner syncen.
 +
 +
 +Will man nun einen neuen Drucker installieren,​ ergänzt man die Daten in ''/​var/​linbo/​postsync''​ und nach dem nächsten sync stehen diese Dateien auf dem Client zur Verfügung und der Drucker wird installiert.
  
 [[anwenderwiki:windowsclient:postsync-aufgabenplanung]] anwenderwiki/windowsclient/postsync-aufgabenplanung.txt · Zuletzt geändert: 2013/10/10 15:59 (Externe Bearbeitung)