WPKG 4: AutoIT
Einführung
Mit AutoIT ist es möglich einen Softwareprozess vollständig zu automatisieren. Dies bietet sich im Rahmen der Softwareverteilung für Installer an, die nicht über eine Silent-Installation verfügen, oder diese z.B. aufgrund fehlender Signaturen für Treiber unter Windows 7 64-bit fehlschlägt.
Scripte
Die Steuerung der entsprechenden Software erfolgt über Scripte. Die Dokumentation zur Erstellung findet sich unter: http://www.autoitscript.com/autoit3/docs/
Login-Script
; netlogon/deploy.au3
#include <String.au3>
$title = "Software Deployment "& @ComputerName & " " & @OSArch
$domain = "$DOMAIN"
$user = "$ADMINUSER"
$pw = "$PASSWORDENCODED"
; Decrease $progressstep if there are any new progressRun/runifexists-Commands below
Global $progress
Global $progressstep
$progress = 0
$progressstep = 10
If Not FileExists("\\192.168.1.1\netlogon\checknetwork.txt") Then
MsgBox(64,$title, "Die Softwareverteilung konnte nicht ausgeführt werden,"& @CRLF &"da das Netzwerk nicht zur Verfügung steht.",5)
Exit
EndIf
$chk_start = MsgBox(262209,$title, "Hallo " & @UserName & "!" & @CRLF & @CRLF & "Die Softwareverteilung startet nachdem diese Meldung geschlossen wurde. Dies kann einige Minuten in Anspruch nehmen." & @CRLF & @CRLF & "Unter Umständen wird das System ohne Vorwarnung neu gestartet." & @CRLF & @CRLF & "Soll die Softwareverteilung jetzt nicht ausgeführt werden, bitte auf Abbrechen klicken.", 60)
If $chk_start = 2 Then
MsgBox(262160,"$title", "Die Softwareverteilung wurde abgebrochen. Dies kann negative Auswirkungen auf die Systemsicherheit haben.",15)
Exit
EndIf
ProgressOn($title,"Initialisiere...","Bitte warten...")
$pw = _StringEncrypt(0, $pw, "0")
If StringInStr(@ComputerName, "-PC") Then
progressRun("\\192.168.1.1\netlogon\scripts\fonts.bat", "Schriften werden installiert.")
Else
$progress = 50
EndIf
progressRunWait("cscript.exe \\192.168.1.1\wpkg\wpkg.js /synchronize /quiet /nonotify", "Software wird installiert.")
progressRunWait("net TIME /SET /Y", "Systemuhr wird gesetzt.")
progressRunWait("\\192.168.1.1\wpkg\WinAuditu.exe /r=sopmdM /o=csv /f=\\192.168.1.1\audit\", "SystemInfos werden gesammelt.")
ProgressOff()
MsgBox(64,$title, "Die Softwareverteilung wurde beendet.")
Func progressRun($cmd, $message)
$progress = $progress + $progressstep
ProgressSet($progress,$message,"Bitte warten...")
$pid = RunAs($user,$domain,$pw,0,$cmd,@SystemDir,@SW_HIDE)
EndFunc
Func progressRunWait($cmd, $message)
$progress = $progress + $progressstep
ProgressSet($progress,$message,"Bitte warten...")
$pid = RunAsWait($user,$domain,$pw,0,$cmd,@SystemDir,@SW_HIDE)
EndFunc
Das Script startet alle nötigen Prozesse zur Softwareverteilung als Administrator. Für jeden Schritt wird eine Progressbar eingeblendet. Da das Script das Administrator
-Kennwort enthält darf es nur als verschlüsselte EXE auf dem Server abgelegt werden.
FreePDF
Beispiel für ein Install-Script mit AutoIT:
; freepdf.au3
Run("\\192.168.1.1\wpkg\software\FreePDFXP\FreePDF4.06.exe")
WinWait("FreePDF 4.06")
WinActivate("FreePDF 4.06")
SendKeepActive("FreePDF 4.06")
Send("!s")
WinWait("FreePDF Setup","",30)
WinActivate("FreePDF Setup")
SendKeepActive("FreePDF Setup")
Send("{ENTER}")
WinWait("Windows-Sicherheit","",10)
WinActive("Windows-Sicherheit")
SendKeepActive("Windows-Sicherheit")
Send("!i")
WinWait("FreePDF", "&End")
WinActive("FreePDF", "&End")
SendKeepActive("FreePDF", "&End")
Send("!e")
Der Befehl run
startet die eigentliche Installation. Der Befehl WinWait
gibt den Namen des Fensters an, welches AutoIT "fernsteuern" soll. Der Name kann mit dem Tool autoIt3 Window Info
ermittelt werden.
Der Befehl WinActivate
aktiviert das angegebene Fenster, damit Tastatureingaben auch wirklich an das richtige Fenster gesendet werden. Es kann auch ein Text angegeben werden ("&End"
), der im angegebenen Fenster stehen muss.
Als letzter Parameter kann ein Timeout angegeben werden, dies ist hilfreich, wenn das Fenster nicht immer erscheint sondern nur unter bestimmten Umständen (z.B. Signaturwarnung unter Win7 64-bit).
Der Befehl SendKeepActive
erhöht die Wahrscheinlichkeit, dass die Tastatureingabe an das korrekte Fenster gesendet wird.
Der Befehl Send
sendet die angegebene Taste(nkombination) an das zuvor angegebene Fenster. !
steht hierbei für die Taste ALT
.
Selbstlaufende Scripte
Damit AutoIT nicht auf jedem Clientrechner installiert werden muss empfiehlt es sich ein Script vor dem Deployment der Software in ein selbstlaufendes Script zu wandeln. Hierbei wird eine EXE-Datei erzeugt, die dann über wpkgExpress als Installationsaufruf genutzt werden kann.
Am einfachsten werden selbstlaufende Script aus Scite4autoIt erzeugt (Ctrl+F7
), die EXE wird dann im selben Verzeichnis in dem der Quellcode des Scriptes liegt erzeugt.
Registry auslesen/Datei schreiben
AutoIT kann auch Werte aus der Registry auslesen (und schreiben). Außerdem ist es möglich Dateien zu schreiben, hierbei werden auch UNC-Pfade unterstützt.
; regread.au3
local $computer = StringLower(@ComputerName)
local $file = FileOpen("\\192.168.1.1\wpkg\logs\" & $computer & "_uninstall.log", 2)
local $key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
for $i = 1 to 42000
local $var = RegEnumKey($key, $i)
If @error <> 0 Then
ExitLoop
Else
local $name = RegRead($key & $var, "DisplayName")
local $uninstall = RegRead($key & $var, "UninstallString")
if $uninstall Then
FileWrite($file, $name & "||" & $uninstall & @CRLF)
;MsgBox(4096, "Value " & $var, $name & "||" & $uninstall)
EndIf
EndIf
Next
Das Script liest zunächst die Schlüssel unterhalb von HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
aus. Für jeden gefundenen Schlüssel werden dann die Werte DisplayName
und UninstallString
ausgelesen und in einer Datei gespeichert. So kann man die Werte für eine Deinstallation über WPKG herausfinden.
Links
Reference:
Macros: http://www.autoitscript.com/autoit3/docs/macros.htm Functions: http://www.autoitscript.com/autoit3/docs/functions.htm GUI: http://www.autoitscript.com/autoit3/docs/guiref/GUIRef.htm