In dem Artikel Drucker semiautomatisch im SAP anlegen habe ich beschrieben wie man sich im Handumdrehen 100 Drucker für den Import ins SAP vorbereiten lassen kann. Was fehlt noch? Richtig! Der Import an sich. Dieser wurde in der aktuellen Version mit implementiert.
Die Basis des bereits bekannten Scripts wurde erweitert und verteilt per SCP/SSH die Drucker auf die entsprechenden Systeme und setzt dabei auf einen bereits angelegtes SAP Event und einen entsprechend eventgesteuerten Batchjob, der sich um den automatischen Import der Drucker kümmert.
Hier zunächst das neue Script:
#!/usr/bin/ksh #Script zum Anlegen von Druckern im SAP #Patrick Wessel, 07/2014 #Konstanten TIME=`date "+%Y%m%d%H%M%S"` SCRIPT=$1 WORK=$(pwd) INPUT=$WORK/input.txt OUTPUT=$WORK/output.txt SAPPRINTER="" KOMMENTAR="" HOSTPRINTER="" PRINTERDISABLE="" #Drucker deaktivieren=X SLEEP=60 #Wartezeit Loeschen der Datei SSHSERVERDEV[1]="server1:d01adm:D01:00" SSHSERVERDEV[2]="server2:e01adm:E01:00" SSHSERVERDEV[3]="server3:q01adm:Q01:00"
### Pruefen ob Input File existiert und PRINTERDISABLE setzen [ ! -f $INPUT ] && echo "Es wurde keine Input Datei gefunden. Das Script wird beendet." && exit 1 ### Pruefen ob altes Output File existiert und umbenennen if [ -f $OUTPUT ] then mv $OUTPUT $OUTPUT.old touch $OUTPUT chmod 666 $OUTPUT fi ### Printer Disable parsen [ -f $INPUT.grep ] && rm $INPUT.grep grep '.' $INPUT > $INPUT.grep mv $INPUT.grep $INPUT echo "\n### 1. Druckerdefinitionsdatei generieren ###" case $(grep -v "#" $INPUT | grep PRINTERDISABLE | awk -F= '{print $2}') in X|x) PRINTERDISABLE="X" echo "Die Drucker werden als deaktiviert gekennzeichnet." ;; *) PRINTERDISABLE="" echo "Die Drucker werden als aktiviert gekennzeichnet." ;; esac ### Output Header schreiben echo "VERSION = \"0.1\"\nTIME = \"${TIME}\"\nSYSTEM = \"D01\"\nRELEASE = \"700\"" >>$OUTPUT #Drucker konfiguration parsen und ausgeben cat $INPUT |grep -v PRINTERDISABLE | while read ZEILE do #SAP-Drucker, Drucker und Kommenatar parsen SAPPRINTER="" HOSTPRINTER="" KOMMENTAR="" SAPPRINTER=$(echo ${ZEILE} | awk -F';' '{print $1}') HOSTPRINTER=$(echo ${ZEILE} | awk -F';' '{print $2}') KOMMENTAR=$(echo ${ZEILE} | awk -F';' '{print $3}') echo "Erzeuge Konfiguration fuer SAP Drucker $SAPPRINTER" echo "* DEVICE = {" >>$OUTPUT echo " NAME = \"${SAPPRINTER}\"" >>$OUTPUT echo " PADEST = \"${SAPPRINTER}\"" >>$OUTPUT echo " PATYPE = \"TREIBER\"" >>$OUTPUT echo " PAMODEL = \"TYP\"" >>$OUTPUT echo " PACLASS = \"\"" >>$OUTPUT echo " PAARCHIVER = \"\"" >>$OUTPUT echo " PALANGU = \"D\"" >>$OUTPUT echo " PADISABLED = \"${PRINTERDISABLE}\"" >>$OUTPUT echo " PANOQUERY = \"X\"" >>$OUTPUT echo " PADUPCOPY = \"\"" >>$OUTPUT echo " PADUPLEX = \"\"" >>$OUTPUT echo " PASTORELOC = \"\"" >>$OUTPUT echo " PADFLTUTTL = \"\"" >>$OUTPUT echo " PADFLTSTTL = \"\"" >>$OUTPUT echo " PASYNC = \"X\"" >>$OUTPUT echo " PAMONI = \"\"" >>$OUTPUT echo " PASTANDORT = \"${KOMMENTAR}\"" >>$OUTPUT echo " PAMSG = \"${KOMMENTAR}\"" >>$OUTPUT echo " PAMSSERVER = \"server_D01_00\"" >>$OUTPUT echo " PAMETHOD = \"E\"" >>$OUTPUT echo " PAPROSNAME = \"${HOSTPRINTER}\"" >>$OUTPUT echo " PALOMS = \"PMCPOL\"" >>$OUTPUT echo " PALPRCMD = \"\"" >>$OUTPUT echo " PALPDHOST = \"\"" >>$OUTPUT echo " PALPDPORT = \"0\"" >>$OUTPUT echo " PACONNTIME = \"0\"" >>$OUTPUT echo " PAREADTIME = \"0\"" >>$OUTPUT echo " PATRAYS = \"0\"" >>$OUTPUT echo " PAXSHIFT = \"0\"" >>$OUTPUT echo " PAYSHIFT = \"0\"" >>$OUTPUT echo " PAXSHUNIT = \"MM\"" >>$OUTPUT echo " PAYSHUNIT = \"MM\"" >>$OUTPUT echo " PACRYPTMOD = \"\"" >>$OUTPUT echo " PACRYPTMET = \"\"" >>$OUTPUT echo " PANOVSERVR = \"\"" >>$OUTPUT echo " PAPOOLART = \"\"" >>$OUTPUT echo " PATRACE2 = \"\"" >>$OUTPUT echo " PATRACEF = \"\"" >>$OUTPUT echo " PAPROTDATA = \"\"" >>$OUTPUT echo " PAPROTCMD = \"\"" >>$OUTPUT echo " PAPROTRES = \"\"" >>$OUTPUT echo " PAKEEPFILE = \"\"" >>$OUTPUT echo " CHGNAME1 = \"SAPBENUTZER\"" >>$OUTPUT echo " CHGTSTMP1 = \"${TIME}\"" >>$OUTPUT echo " CHGSAPREL1 = \"700\"" >>$OUTPUT echo " CHGSAPSYS1 = \"D01\"" >>$OUTPUT echo " PADEVGRP = \"\"" >>$OUTPUT echo " COLORPRT = \"\"" >>$OUTPUT echo " PRINTMODE = \"\"" >>$OUTPUT echo " INPUTTRAY = \"\"" >>$OUTPUT echo " PANOCHOICE = \"\"" >>$OUTPUT echo "}" >>$OUTPUT done echo "*** Druckerdefinitionsdatei erfolgreich erzeugt.***" echo "\n### 2. Uebertragung der Druckerdefinitionsdatei und import ins SAP ###" MAXSYSTEME=${#SSHSERVERDEV[*]} echo "Es sind $MAXSYSTEME SAP Systeme fuer die Einrichtung konfiguriert (siehe Scriptheader)." let MAXSYSTEME=MAXSYSTEME+1 SYSZAEHLER=1 while [ $SYSZAEHLER -lt $MAXSYSTEME ] do HOST=$(echo ${SSHSERVERDEV[$SYSZAEHLER]} | awk -F':' '{print $1}') USER=$(echo ${SSHSERVERDEV[$SYSZAEHLER]} | awk -F':' '{print $2}') SYSTEM=$(echo ${SSHSERVERDEV[$SYSZAEHLER]} | awk -F':' '{print $3}') SYSTEMNR=$(echo ${SSHSERVERDEV[$SYSZAEHLER]} | awk -F':' '{print $4}') echo "### Ziel $HOST\nKopiere $OUTPUT auf $HOST..." scp $OUTPUT $HOST:/tmp ssh $HOST "ls -al /tmp/output.txt" echo "\nStarte Druckerimport auf $HOST per Event INSTALL_PRINTER" ssh $HOST "sudo su - $USER -c '/usr/sap/${SYSTEM}/SYS/exe/run/sapevt INSTALL_PRINTER name=${SYSTEM} nr=${SYSTEMNR}'" echo "\nWarte $SLEEP Sekunden bis der JOB fertig ist und loesche $i:/tmp/output.txt" sleep $SLEEP ssh $HOST "rm /tmp/output.txt" echo "*** Druckerimport auf $HOST abgeschlossen. ***\n\n" let SYSZAEHLER=SYSZAEHLER+1 done exit 0
Das Script drucker_anlegen.sh gibt es natürlich auch zum Download.
Die Datei input.txt kann jetzt mit dem Parameter „PRINTERDISABLE=X“ erweitert werden. Somit muss das Script nicht immer wieder editiert werden. Sofern hier ein x/X gesetzt ist werden die Drucker direkt beim Import deaktiviert. Ist das Schlüsselwort nicht vorhanden oder per # deaktiviert wird es ignoriert. Da hier keine Überprüfung auf Umlaute oder exotische Sonderzeichen vorgenommen wird könnte deren Verwendung zu Problemen beim Import führen und z.B. zu einem Unicode Konversationsfehler führen.
cat input.txt PRINTERDISABLE=X P001;printer-ffm-p001;Zentraldrucker Rechnungswesen (IP: 172.128.1.20)
Um neue Systeme hinzuzufügen muss das Script editiert werden. Hier einfach den entsprechenden neuen Parameter setzen: SSHSERVERDEV[] Das Format entspricht:
Auf dem entsprechenden Zielsystem muss für die Verarbeitung ein neues Batch Event angelegt werden.
Hierzu öffnet man die Transaktion SM62, wechselt auf den Reiter Batch Event und legt ein neues Event an:
EREIGNIS: INSTALL_PRINTER BEDEUTUNG: Drucker aus /tmp/output.txt importieren
Anschließend muss noch ein entsprechender Batchjob angelegt werden, der auf den Event reagiert und den Import vornimmt. Hierzu bediene ich mich des Reports „RSPOXDEV“, für den ich eine entsprechende Variante „DRUCKER_IMPORT“ angelegt habe. Die Variante sieht wie folgt aus:
Server: /tmp/output.txt Import Import ausführen (Unicode) Protokoll erzeugen
Zum Anlegen des Jobs wechselt man in die Transaktion SM36:
Jobname: SPAD_INSTALL_PRINTER Ausführungsziel -> INSTANZNUMMER aus der SSHSERVER Config (siehe oben) Start nach Ereignis: INSTALL_PRINTER Startart Eventperiodisch Step: ABAP Programm RSPOXDEV Variante: DRUCKER_IMPORT
Sollte es auf dem System größere Verzögerungen geben was die Batchläufe betrifft müsste der SLEEP Timeout im Script entsprechend erhöht werden, da ansonsten das Script die bereitgestellte Datei löscht bevor der durch den Event gestartete Batchjob die Datei einlesen konnte.