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.

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

Next Post Previous Post