Alternative Skript-Sprache zur PowerShell

Administrators Liebling: AutoIt

| Autor / Redakteur: Frank-Michael Schlede, Thomas Bär / Andreas Donner

AutoIt ist eine wirkliche Alternative zu anderen Scriptsprachen und erlaubt es, echte EXE-Programme ohne Runtime-Abhängigkeiten zu kompilieren.
AutoIt ist eine wirkliche Alternative zu anderen Scriptsprachen und erlaubt es, echte EXE-Programme ohne Runtime-Abhängigkeiten zu kompilieren. (Bild: AutoIt Consulting Ltd)

Die wichtigste Script-Sprache für Administratoren im Windows-Umfeld ist sicherlich die PowerShell. Keine Sprache ist binnen kurzer Zeit so mächtig und vor allem wichtig geworden. Wer jedoch ganz schnell reinrassige EXE-Datei braucht, der sollte sich Auto IT anschauen und unseren Schnelleinstieg lesen.

Es gibt viele Script-Sprachen für Windows-Admins, von der alten Batch-Datei, über J- und VB-Script bis hin zur PowerShell. Allen ist eines gemein: Es sind Interpreter-Dialekte bei denen der Anwender den Quellcode direkt lesen und auch modifizieren kann. Während VB-Script auf faktisch jedem Windows-System lauffähig ist, gibt es bei der PowerShell bereits deutliche Versionsabhängigkeiten. Wer seine Workstations und Server auf dem neuesten Stand hält, muss sich jedoch darum kaum Gedanken machen. Eine wirkliche Alternative, mit der Möglichkeit echte EXE-Programme ohne Abhängigkeiten hinsichtlich einer Runtime-Umgebung zu kompilieren, ist das kostenfreie AutoIt.

AutoIt erlaubt die Automatisierung von Aufgaben über die Emulation von Mausklicks und Tastaturanschlägen, ist in der Lage auf Fensterereignisse zu warten und diese zu interpretieren, führt Dateioperationen durch und erlaubt die Erstellung von einfachen Programmoberflächen mit Eingabeboxen, Nachrichtenfenstern und Listen-Items und bietet zusätzliche Helfer, wie beispielsweise eine Monats- und Tagesauswahl („Datepicker“).

Da AutoIt die Funktionen der WinAPI nutzt, den Zugriff auf das COM (Component Object Modelling) erlaubt und Funktionen aus Win32-DLLs aufruft, sind die Möglichkeiten für den Entwickler sehr weitreichend. Selbst kleinere Computerspiele, beispielsweise eine Variante von Super Mario, haben Anwender von Auto It bereits im Forum gepostet.

Die Syntax von AutoIt orientiert sich sehr stark an BASIC. Das macht den Einstieg in die Skriptsprache für weniger programmieraffine Anwender leichter. Diverse Add-Ons, wie der SciTE Editor mit Syntax-Highlighting oder der KODA Form Designer, für die Erstellung komplexerer Oberflächen, erleichtern die Erstellung von eigener Programme.

Die Installation des gerade einmal 11 MByte großen Programms beschränkt sich auf einen Doppelklick und die Auswahl der x86 Variante, da diese auch auf x64-Umgebungen dringend empfohlen wird. Eine Online-Hilfe liegt im CHM-Format bei – weitere Informationsquellen bietet das Internet. Unter „Previous Versions“ finden sich noch immer die Version 3.2.12.1 mit Windows 9x/NT-Unterstützung und die Version 3.3.8.1, die auf Windows 2000-PCs arbeitet. Aktuell ist die Version 3.3.14.1 vom Juli 2015.

Gegrüßt seiest du Welt

Wir beginnen, wie könnte es anders sein, mit „Hello World“. Zur Script-Erstellung können Anwender jeden beliebigen ASCII-Editor verwenden, beispielsweise unterstützt das beliebte „Notepad++“ den Dialekt mit der passenden Sprachdatei für das Syntax-Highlighting. Wer lieber mit einer Autovervollständigung und einer brauchbaren Fehlerprüfung arbeitet, sollte den mitinstallierten SciTE-Lite-Editor nutzen. Diesen Editor bietet Windows auch über das Kontextmenü bei einem Klick auf eine AU3-Datei an.

Die Oberfläche des mitgelieferten SciTE-Lite beschränkt sich auf die notwendigen Befehle und Strukturen: Zeilennummern, Kompilierungs-Befehle und Optionen, Druckbefehl, Lesezeichen, Suchen/Ersetzen oder zeilen- beziehungsweise blockweises Auskommentieren. Für unser „Hallo Welt“ braucht es gerade einmal eine Zeile:

MsgBox(0,"","Hallo Welt")

Die Syntax weicht doch von dem ab, was VB-Entwickler für ihre MsgBox kennen. Noch eine weitere Eigenheit der Software: Ohne dass ein Skript gespeichert ist kann es auch nicht mit F5 im Editor gestartet werden.

Notepad in der Fernsteuerung

Die besondere Stärke der Sprache liegt jedoch in der einfachen Automatisierung von anderen Programmen auf einem Windows-PC. Am Beispiel eines Aufrufs von Notepad wird diese Einfachheit gut sichtbar:

Run("notepad.exe")
WinWaitActive("Unbenannt - Editor")
Send("Diesen Text sendet AutoIt automatisch an Notepad.")

Der Befehl WinWaitActive ist in diesem Zusammenhang von besonderer Bedeutung, da das Skript nun darauf wartet, dass das Betriebssystem das anvisierte Programm auch wirklich startete. Auf dem einen PC geht das schneller, als auf einem anderen Computer. In dieser Variante ist der Anwender jedoch von der Sprachversion abhängig. Ein englischsprachiges Windows nennt das Fenster nicht „Unbenannt – Editor“, sondern „Untitled – Notepad“. Wer sich nicht sicher ist, in welcher Sprachversion die Automatisierung zum Einsatz kommt, kann auch einen klassischen Wartebefehl verwenden:

Run("notepad.exe")
sleep(2000)
Send("Diesen Text sendet AutoIt an Notepad, nach einer Sekunde!")

Der Befehl Sleep(2000) pausiert den Script-Ablauf für 2000 Millisekunden. Ungeduldige Benutzer, die nicht einmal eine Sekunde auf ein Fenster warten würden, können diesen Ablauf jedoch durch einen Mausklick und den damit verbundenen Fokusverlust aus dem Tritt bringen. Daher empfiehlt es sich, bei Verwendung des Wartebefehls, die Tastatur- und Mauseingaben kurzfristig außer Kraft zu setzen:

#RequireAdmin
BlockInput(1)
Run("notepad.exe")
sleep(1000)
Send("Diesen Text sendet AutoIt ganz sicher an Notepad.")
BlockInput(0)

Das Schlüsselwort „#RequireAdmin“ erfordert, dass das Betriebssystem diesem Programm die Administrationsrechte übergibt. Sofern der Benutzer die UAC-Steuerung in Windows herunterstellt merkt dieser von der kurzen Umstellung nichts, ansonsten erscheint die Aufforderung in den administrativen Kontext zu wechseln.

Aufruf von Programmen

Soll beispielsweise das Kommando „dir“ aus der Eingabeaufforderung zur Ausführung gebracht werden, so empfiehlt sich der Befehl:

RunWait(@COMSPEC & " /c Dir C: ")

Die Verwendung des Makros @Comspec empfiehlt sich dann, wenn der Entwickler nicht wissen kann, in welchem Verzeichnis der Kommando-Interpreter cmd.exe liegt. Der Befehl RunWait wartet darauf, dass das Programm aus der Eingabeaufforderung ausgeführt wurde, eher der Script-Ablauf fortgesetzt wird. Dennoch dauert der Aufruf nur ein Bruchteil einer Sekunde und das Fenster verschwindet wieder. Soll etwas länger zu sehen sein, beispielsweise bei einem Telnet-Aufruf für einen Switch oder Router, arbeitet der Script-Entwickler wieder mit WinWait und Sleep:

Run("telnet 192.168.1.1")
Sleep(3000)
WinWaitActive("Telnet 192.168.1.1")
Send("admin")
Send("{ENTER}")
Sleep(3000)
Send("PASSWORT")
Send("{ENTER}")
Sleep(3000)
WinClose("Telnet 192.168.1.1")

Insgesamt sind nur wenige Dateitypen von Haus aus „ausführbar“. Möchte der Administrator beispielsweise einen Installer mit Namen „install.msi“ starten, so muss das Betriebssystem dieses Installationspaket mit dem Windows Installer-Programm öffnen:

RunWait("msiexec install.msi")

Läuft ein Programm?

Es gibt Fälle bei denen ist es wichtig, dass ein bestimmtes Programm auch wirklich läuft. Sollte es einmal beendet sein, so sollte es sofort wieder starten. Windows-Dienste, in der UNIX-Welt auch als „Daemons“ bezeichnet, sind die traditionellen Varianten für diese Hintergrundprogramme. Die Entwicklung eines Dienstes unterscheidet sich im Detail von der Programmierung eines normalen Programms. Aber auch ohne diese Unterschiede genau zu kennen, haben IT-Profis mit AutoIt die Möglichkeit ein Programm quasi in den Dauerdienst zu schicken und das mit nur wenigen Zeilen:

While 1
 Sleep(1000)
 If Not ProcessExists("notepad.exe") Then
 Run("notepad.exe")
 EndIf
Wend

Die fünf Zeilen in dem Script prüfen, ob unter Windows der Prozess von Notepad gestartet ist. Ist dies nicht der Fall, so wird Notepad gestartet. Die Schleife mit While 1 und Wend läuft dauerhaft. Der Anwender sieht im Task-Tray von Windows somit dauerhaft das AutoIt-Symbol. Hinsichtlich der Systemlast muss sich der Administrator keine Sorgen machen – ein Blick in den Task Manager zeigt, dass die Prozessorauslastung nicht nach oben geht.

Das unsichtbare Fenster

Interessant ist auch diese Erweiterung für das oben gezeigten Script. Mit einer kleinen Anpassung wird ein Programmfenster unsichtbar oder transparent:

While 1
 Sleep(1000)
 If Not ProcessExists("notepad.exe") Then
 Run("notepad.exe")
 EndIf
WinSetTrans("Unbenannt - Editor","","127")
Wend

Der Wert 0 bei WinSetTrans sorgt dafür, dass das Fenster überhaupt nicht mehr sichtbar ist, außer im Task-Tray. Die Einstellung 127 gibt ein halbwegs transparentes Fenster aus, bei 255 ist es, wie üblich vollständig sichtbar.

Client-Server-Applikationen und mehr

Wer es noch ein wenig spannender mag, sollte in jedem Fall einen Blick in den Ordner „Examples“ von AutoIt werfen. Im Unterordner „GUI“, „Advanced“ gibt es zwei Beispiel-Dateien, beginnend mit dem Dateinamen „NamedPipe“. Hierunter verbergen sich ein Client- und ein Server-Script, welches die Ausführung von Windows-Kommandos auf dem Server-System über NamedPipes erlaubt.

Insgesamt konnten wir in diesem Beitrag den Leistungsumfang von AutoIt aber leider nur anreißen. Der interessierte Leser findet im deutschsprachigen Forum noch viele Tipps, Ideen oder Vorlagen bspw. zu Datenbankzugriffen auf SQLite, E-Mail-Versand, Backup-Programmen oder Grafikprogrammierungen.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 43642973 / Admin-Tools)