Windows-Scripting

Werbung
Windows-Scripting
Aymen Ayoub
Fachbereich Mathematik und Informatik
Seminar: IT-Administration
Email: [email protected]
Zusammenfassung—Skriptsprachen erlauben es Administratoren und Anwendern in der Informatik viele sich wiederholende
Aufgaben zu automatisieren und damit zeitspaarende Aktivitäten
durchzuführen. Es werden eine Menge Werkzeuge bereitgestellt,
die der Benutzer nicht selber manuell erstellen muss. Aufgaben,
wie das Erstellen von Benutzerkonten, Erzeugen von Log-Dateien
oder das Verwalten von Warteschlangen werden dadurch unterstützt.
I. E INFÜHRUNG
In den letzten Jahren haben sich die Funktionalitäten von
Skriptsprachen erweitert. Es gibt fast keinen Unterschied zwischen Skriptsprachen und den klassischen Programmiersprachen. Solche Sprachen haben darüber hinaus den Vorteil, dass
man sie leicht lernen kann, obwohl sie meistens auf ähnlichen Konzepten basieren, wie die traditionellen Programmiersprachen. Deswegen werden Skriptsprachen wie JavaScript,
VBscript, Perl oder Python von Programmierern besonders
gerne verwendet. Microsoft hat es geschafft ein System zu
entwickeln, mit dem sich viele Skriptsprachen, sowohl auf
der Betriebsystemebene, als auch auf der Anwendungsebene
in modernen Betriebssystemen einbinden lassen.
haben Computerhersteller ihre Produkte mit einfachen Kommandosprachen ausgestattet. Heutzutage besitzen Skriptsprachen mehr Merkmale von richtigen Programmiersprachen: Es
lassen sich mit diesen Sprachen Schleifen und Verzweigungen
programmieren, mit denen viele Abläufe wie Softwareinstallation und Benutzerkontenverwaltung automatisiert werden
können. Die entscheidende Entwicklung dieser Sprachen war
in den achtziger und neunziger Jahren. Damit haben diese
Sprachen viele Konzepte der objektorientierten Programmierung gewonnen [7]. Die Evolution der Skriptsprachen lässt sich
in drei Phasen unterteilen, wie in der folgenden Abbildung zu
sehen ist:
A. Skriptsprachen
Die Bezeichnung "Skriptsprachen"wird aus dem Wort Scripting abgeleitet und die Bedeutung dieses Wort bezieht sich
auf das Zusammenfassen von vielen Programmbefehlen in
einem Script. Skriptsprachen sind meistens für kleine Programme gedacht. Die Syntax dieser Sprachen lässt sich in
kurzer Zeit überschauen. Skriptsprachen bilden eine interaktive
Schnittstelle, die Kommandos an das Betriebsystem weitergeben. Zu diesen Eigenschaften kommt noch die Unterstützung
durch Variablen, Ausdrücken und Kontrollstrukturen hinzu.
Die entstehenden Skripte nennt man bei Windows und Dos
Batchdateien [11]. Nach dem Erstellen eines Scriptes bietet
sich die Möglichkeit, die ganzen Schritte, die durch die
Befehle beschrieben sind, auszuführen, ohne jedesmal einen
bestimmten Befehl eingeben zu müssen. Dadurch spart der
Anwender viel Zeit, da viele administrative Aufgaben per
Mausklick durchgeführt werden können.
1) Entwicklung von Skriptsprachen: Skriptsprachen waren
am Anfang in Form von Lochkarten kodiert und konnten mit
Hilfe eines Kodelesers interpretiert werden. In den sechtziger
Jahren hat man die Sprache Job Control Language (JCL) zum
Automatisieren der Abläufe auf dem Betriebsystem OS/360,
der von IBM entwickelt wurde, verwendet[10]. In dieser Zeit
Abbildung 1.
Evolutionsstufen der Windows-Programmierung
Mitte der achtziger Jahre hat man Skripte mit der DOSBatchsprache erstellt. Diese basiert auf klassichen DLL‘s und
den Windows 32 API (Application Programming Interface).
In der zweiten Phase dieser Entwicklung und nach etwa
zehn Jahren, wurde die Active X Architektur von Microsoft
entwickelt. Diese basiert auf dem COM (Component Objekt
Model), auf der verschiedene Skriptsprachen laufen können.
Danach erschien das Windows Powershell als Alternative,
sowohl zum cmd.exe als auch zum WSH (Windows Script
Host). PowerShell ist ein Teil der modernen Betriebsysteme
von Microsoft.
2) Eigenschaften von Skriptsprachen: Skriptsprachen werden im Gegensatz zu den traditionellen Programmiersprachen
nicht kompiliert und dann ausgeführt, sondern werden interpretiert und dann Zeile für Zeile in die Maschinensprache
umgewandelt. Nur beim Ausführen des Programms werden
Fehler erkannt. Während man in klassischen Programmiersprachen tausende von Zeilencodes braucht, um ein Programm zu
schreiben, lässt sich das gleiche meistens in einer Skriptsprache mit viel weniger Codes erreichen.
In Skriptsprachen ist es nicht zwingend Variablen zu deklarieren. Eine Variable ist keinem bestimmten Datentyp zugeordnet
und kann in einem Programm zwischen verschiedenen Datentypen wechseln. Die Typumwandlung erfolgt automatisch.
Diese Eigenschaft macht das Programmieren flexibler, aber
kann auch viele Fehler erzeugen, da im Programm der Typ
gewechselt wird. Bei späterem Zugriff auf die Variable kommt
es zu einem Fehler, da der Typ nicht mehr stimmt. Eine
weitere Eigenschaft von Skriptsprachen ist die automatische
Speicherverwaltung (Garbage Collection). Der Programmierer
muss sich nicht um den Speichermanagment kümmern, wie
zum Beispiel bei C++ [4].
Scripting-Werzeuge Es existieren viele Editoren zur Programmierung von Skripten: Das Editor Notepad ist das WindowsWerkzeug, das bereits in allen Windows-Betriebssysteme vorhanden ist. Der Nachteil dieses Editors ist, dass es einfache
Funktionen normaler Editoren wie Zeilennummerierung nicht
unterstützt. Sogar das Behandeln von Fehlern ist sehr aufwendig, da die Ausführung der Skripte nicht vom Editor kontrolliert wird. Andere kostenpflichtige Drittanbieterprodukte
wie PrimalScript und SystemScripter sind anwendungsfreundlicher als das Notepad. PrimalScript unterstützt neben den
WSH auch viele andere Sprachen und Scripting-Umgebungen
und bietet viele hilfreiche Funktionen wie die automatische
Farbunterscheidung oder das automatische Vervollständigung
von Methodennamen. Microsoft hat inzwischen eine eigene
Skripting-Architektur entworfen, die im folgenden Abschnitt
beschrieben wird.
3) Windows Scripting Architektur: Auch bekannt unter den
Namen ActiveX Scripting-Architektur. Diese Architektur lässt
sich in der folgenden Abbildung darstellen: Skripte die inner-
Abbildung 2.
Die Active Scripting Architektur
halb dieser Architektur ausgeführt werden, heißen WindowsSkripte. Die Architektur beruht auf drei Hauptkomponenten,
auf die im folgenden Abschnitt eingegangen wird.
Die Scripting-Hosts sind bestimmte Ablaufsumgebungen, in
denen die Skripte ausgeführt und angewendet werden. Dadurch wird dafür gesorgt, dass die Skriptdateien gelesen und
weiter an die richtige Skript-Engine zum Interpretieren und
Ausführen gegeben werden. Darüber hinaus gibt auch eine
Menge von Objekten mit ihren verschiedenen Eigenschaften
und Methoden, die für die Skripte in dieser Umgebung zur
Verfügung stehen. Windows Script Host (WSH) ist der bekannteste Skripting-Host, der von Microsoft entwickelt wurde.
WSH ist für die Automatisierung der Aufgaben in der Systemadministration nützlich. Dieser Skripthost ist mit dem
Befehlsinterpreter (cmd.exe), über dem Batchdateien ausgeführt werden können, sehr ähnlich und ist auch in den
Standardinstallationen der neueren Betriebsysteme von Microsoft enthalten. Dadurch wird die Ausführung von Skripten
ermöglicht. WSH basiert hautsächlich auf dem Component
Object Model (COM). Die zwei Hauptkomponenten von
Windows Script Host sind WScript und CScript. Mit denen
ist es möglich, viele Skriptsprachen wie VBscript, Jscript
(diese zwei Skriptsprachen wurden von Microsoft entwickelt),
PerlScript(ActiveState) oder Python, zu interpretieren. Der
Interpreter für die Skriptsprachen VBS und JScript wird in
modernen Betriebssystemen mit dem WSH mitgeliefert. Die
Ausführung von Skripten im WSH-Umgebung kann entweder
mit Doppelklick auf die Datei durchgeführt werden oder mit
einem Aufruf von der Konsole der cmd.exe unter Eingabe
des dazugehörigen Pfades erfolgen. Diese beiden ScriptingHosts von WSH haben fast den gleichen Befehlsumfang [14].
Der wesentliche Unterschied besteht darin, wie die Ausgaben
dargestellt werden.
WScript Das WScript-Objekt und die enthaltene Unterobjekte
stellen viele nützliche Funktionalitäten zur Verfügung. Die
Ausgaben auf dem Bildschirm können dadurch im Form
von Dialogfenstern erscheinen. Das erfolgt mit der Methode
Echo(), die ein zentraler Ausgabebefehl in WSH ist. Man
kann viele Zeichenketten nacheinander in einem Fenster auf
der Konsole ausgeben, wie das folgende Beispiel zeigt:
WScript.Echo Arg1, Arg2, Arg3, ...
Es werden alle Argumente mit einem Leerzeichen getrennt
ausgegeben. Die Ausführung eines Skriptes unter WScript erfolgt als Windows-Anwendung. WScript kann auch mit COMObjekten interagieren, die viele Automatisierungsfähigkeiten
besitzen [3]. Für den Umgang mit COM-Objekten werden
in WScript die Methoden CreateObject() und GetObject()
verwendet [3].
CScript In CScript erfolgt die Ausführung der Skripte auf
der Kommandozeile (DOS-Fenster), indem das Skript aufgerufen wurde. Die Ausführung von Skripten mit dem WScript
ist die Standardeinstellung. Man kann aber auch folgendermaßen ein Skript mit CScript von der Eingabeaufforderung
starten: Man gibt in der Eingabeaufforderung "cscript"ein.
Dann kommt ein Leerzeichen, anschließend wird der Pfad
zu dem Skript eingegeben. Leerzeichen im Pfad werden in
Anführungszeichen gesetzt [12].
Man hat aber auch die Möglichkeit, das CScript als
Standard-Scripting-Host einzustellen. Dabei wird der Befehl
cscript //H:cscript eingegeben und mit der Eingabetaste bestätigt.
WSH ist nicht auf bestimmte Objektmodelle beschränkt.
Es werden in WSH hauptsächlich Objekte der Component
Objekt Model verwendet, die zu einem Skript eingebunden
werden. Damit werden Funktionalitäten von Anwendungen
(.exe) oder Programmbibliotheken (.dll) zur Verfügung gestellt
[2]. VBScript und Jscript sind zwei objektbasierte Skriptsprachen. Jede von ihnen benutzt ihr eigenes Objektmodell, das
in Verbindung mit dem WSH-Objektmodell steht. Mit WSH
lassen sich auch Skripte in reiner WSH-Sprache schreiben, mit
denen viele Administrationsaufgaben, wie das Verbinden von
Netzlaufwerken und Druckern durchgeführt werden können.
Scripting Engines Jede Skriptsprache hat ihr eigenes
Skript-Engine innerhalb der Scripting-Host. Unter einem
Scripting-Host können mehrere Skript-Engines laufen. Bei
WSH ist das der Fall. In modernen Windows Betriebsystemen
sind die Skript-Engines für Visual Basic Script (VBS) und
JScript unterstützt. Eine zusätzliche Skript-Engine für die
Sprache Perl kann heruntergeladen werden. Die Perl-SkriptEngine wird für die Dateierweiterung ".pls "registriert und
dann der geeignete Interpreter für den Datentyp aufgerufen.
Objektbibliotheken(COM-Komponenten) Die Windows
Scripting Architektur beruht hauptsächlich auf den sogenannten COM (Component Object Model)-Objekten. Diese Komponenten ermöglichen den Zugriff auf Systemkomponenten
und stellen viele Funktionalitäten bereit und stehen für jeden
Skripthost und jede Skriptsprache zur Verfügung.
B. Vorstellung einiger Skriptsprachen
1) Cmd.exe: Cmd.exe ist der Kommandozeileninterpreter
unter Windows, bekannt als Eingabeaufforderung in modernen
Betriebsystemen. Früher war diese Konsole der Computer
selbst. Man hatte keine grafische-Windows Oberfläche wie auf
heutigen Betriebsysteme. Es lassen sich mit der cmd.exe viele
Befehle eingeben und Programme starten. Besonders mit Hilfe
von Batchbefehlen wird ermöglicht auf dem System viele
Ereignisse zu automatisieren: Man hat die Möglichkeit zum
Beispiel Dateien und Verzeichnisse zu erstellen, zu kopieren
oder umzubenennen. Das Durchführen von einigen Operationen wird dadurch effizienter. In einer Batch-Datei kann man
viele Befehle, die man auf dem Kommandozeileninterpreter
eingeben könnte, speichern. Dann kann die Datei an den Kommandointerpreter übergeben werden und die Verarbeitung der
Befehle erfolgt wie in einem Stapel. Batch-Dateien sind dazu
geeignet, Aufgaben zu automatisieren, sodass einige Aktionen
nur durchgeführt werden, wenn bestimmte Bedingungen erfüllt
sind.
Cmd.exe ist auch wie Windows Script Host eine Skriptumgebung. Es besteht aber der Unterschied, dass cmd.exe nur
auf die Shellsprache beschränkt ist, während WSH Zugriff auf
eine große Zahl von Skriptsprachen ermöglicht [2]. In dieser
Skriptsprache gibt es interne und externe Befehle: die interne
Befehle werden vom Betriebsystem geliefert (z.B xcopy) und
die externen(zB copy) sind in der cmd.exe integriert. Der
Befehlsinterpreter für die Befehlszeilenkommandos ist abhängig vom Betriebsystem: Bei älteren Betriebsystemen (Microsoft Windows 95, 98, ME) nennt man diese command.com,
bei neueren Betriebsysteme (Microsoft Windows NT, XP)
cmd.exe. Wenn man den Kommandozeileninterpreter startet,
öffnet sich ein (typisch) schwarzes Fenster mit einem blinkenden Cursor. Mit der Tastatur kann man Befehle eintippen
und schließlich mit der Eingabetaste bestätigen. Dann fängt
die Verarbeitung des Progamms durch den Befehlsinterpreter
an. Mit der Windows-Konsole lassen sich zwei der wichtigsten Aufgaben in der IT-Administration durchführen: das
Ausführen von Programmen/Befehlen und das Navigieren in
der Verzeichnisstruktur des Systems.
2) Windows PowerShell: Der Nachfolger der Kommandozeileninterpreter cmd.exe, ist eine neue Umgebung, die es den
Benutzer erlaubt mit dem Betriebssystem zu kommunizieren.
Das Konzept von Powershell kennt man seit vielen Jahren von
den Unix-Shells. Anders als beim Vorgänger cmd.exe und den
Unix-Pendants bash, werden die Objekte unter Verwendung
von Zeichenketten verarbeitet. In PowerShell werden Objekte
verwendet im Zusammenhang mit der .NET-Umgebung und
mit Anbindung an die Windows Management Instrumentation
(WMI) [1].
Der Powershell bietet mehr Funktionen als cmd, sie ist
eigentlich eine Zusammenfassung von vielen Komponenten:
-Dos-Kommandozeilenfenster
-viele Skript und Shellsprachen wie Perl, Ruby, bash und ksh
-der .NETFramework 2.0
-der Windows Management Instrumentation (WMI)
Wer mit Powershell programmieren will, braucht ein Grundwissen bezüglich der Architektur der .NETFramework und
etwas Verständnis für die objektorientierte Programmierung
[3]. Allgemein wird in PowerShell weniger Kenntnisse im
Umgang mit objektorientierten Programmierung verlangt, als
beim Vorgänger WSH. Beim Schreiben eines PowerShellSkriptes kann man auf alle Objekte des .NET Frameworks
zugreifen, die für die Verarbeitung der Daten benötigt werden
[3]. Der Zugriff auf die .NET-Objekte bietet sogar mehr
Methoden und Funktionalitäten für die Dateiverwaltung als
WMI [5]. Powershell bietet auch die Möglichkeit, dass der
Benutzer für ein bestimmtes Objekt alle Eigenschaften und
Methoden anzeigen kann. Das macht der allgemeine Cmdlet
Get-Member[13].
Ein Befehl, der uns alle Methoden und Eigenschaften der
Objekt Date anzeigt, ist in Abbildung 3 zu sehen.
Get-Date | Get-Member
Die Namen der Methoden dieser Objekt werden wie folgt
aufgelistet.
Powershell bietet auch das Verwenden von vielen
Programmier-Features wie Variablen und Kontrollstrukturen
an [4]. Die Befehle in Powershell werden Commandlets (cmdlets) genannt. Ein typisches Befehl in Powershell besteht aus
3 Teile : einem Verb, einen Substantiv und einer optionalen
Parameterliste, und sieht folgendermaßen aus:
verb-Substantiv [-Parameterliste].
Get-Process ist ein einfacher Befehl, der alle auf dem
Rechner aktiven Prozesse anzeigt, wie auf der folgenden
Abbildung zu sehen ist [2].
Die Cmdlets lassen sich auch durch die sogenannten Alias
verkürzen . Beispiel für ein Alias ist ps des Commandlet Get-
Abbildung 3. Cmdlet Get-member der die Methoden eines Objektes auflistet
[13]
Abbildung 4.
Liste der auf dem Rechner aktiven Prozesse
Processes. Die Liste aller Alias lässt sich durch den Befehl
Get-Alias anzeigen.
Man kann in Powershell die Ergebnisse eines Cmdlet
an ein anderes Cmdlet weitergeben, das diese Daten
weiterverarbeitet. Das geschieht durch die sogenannten
Pipelines. In einem Pipeline-Befehl können viele Cmdlets
zusammengeschaltet werden. Die Ausgabe bestimmt immer
der letzte Cmdlet in der Pipeline [1]. Pipeline-Befehle erkennt
man am Zeichen “|”. Ein Pipelinebefehl sieht im Beispiel
folgendermaßen aus:
Get-Process | Format-List
Hier wird ein Objekt der ersten Cmdlet Get-Process
zur zweiten cmdlet Format-List weitergegeben. Damit
werden die aufgelistete Prozesse wegen des zweiten cmdlets
untereinander aufgelistet, anstatt mit der Standardausgabe als
Tabelle der ersten cmdlet [3]. In den Pipelines von Powershell
werden immer Objekte von einem Kommando zu einem
anderen weitergegeben. Shellbefehle lassen sich als Skript
speichern, indem man die Befehle mit einem beliebigen
Texteditor schreibt und mit der Endung "ps.1"speichert.
Dann kann das Skript ausführt werden. Eine wichtige
Eigenschaft, die man bei Powershell beachten muss, ist,
dass die Skripte erstellbar sind aber nicht direkt ausführbar.
Die Funktion der Ausführung von Skripten muss explizit
freigeschaltet werden: Hier wird empfohlen nur signierte
Skripte auszuf"hren. Dies wird eingestellt, indem man
den Powershell mit Administratorrechten startet und den
folgenden Befehl eingibt:
Set-ExecutionPolicy AllSigned.
Restricted ist die Standardeinstellung der Ausführung
der Skripte : Es werden keine Skripte ausgeführt. Es gibt
auch die Einstellung Unrestricted, welche aber nicht zu
empfehlen ist, da sie die Ausführung aller möglichen Skripte
erlaubt, auch wenn diese Schadcodes enthalten. Sie stellt
deswegen ein Sicherheitsrisiko dar. Der Windows Powershell
eignet sich auch gut für die Navigation in Dateisystemen.
Sogar Dateioperationen lassen sich viel einfacher als mit
Batchdateien erledigen. Ein Befehl der für die Suche der zehn
grössten Dateien in einer Verzeichnisstruktur ist das folgende:
Get-ChildItem -recurse | Sort-Object
length -descending | select-object -first
10 | ft name, length -wrap -auto
Dabei werden alle Unterordnern rekursiv durchgesucht und
die Dateien nach Grösse absteigend sortiert. Dann werden die
zehn grössten im Kommandozeilenfenster ausgegeben.
3) Visual Basic Script: ist ein Dialekt der Visual-Basic
Sprachfamilie, die von Microsoft entwickelt wurde. VBS
wird im Internet haüfig verwendet. Es wird geschätzt, dass
etwa 90 % der Skripte, die im Internet verfügbar sind, mit
VBS geschrieben wurden. Die Verbreitung von Internetanwendungen hat dazu geführt, dass diese Sprache immer mehr
von Programmierern verwendet wird. VBS ist eigentlich eine
Skriptsprache die leicht zu erlernen ist und wird vor allem für
Anfänger sehr empfohlen. Aber wie JavaScript hat sich auch
VBS noch nicht flächendeckend durchgesetzt. Das liegt daran,
dass VBS im Internetanwendungen nur vom Internet Explorer
unterstützt wird. Manchmanl verwechselt man VBS mit VBA
(Visual Basic for Applications), da die beiden Dialekte der Visuel Basic Sprachfamilie ähnliche Anwendungsgebiete haben.
VBS ist eine vielseitige Skriptsprache, die viel mit Objekten
arbeitet. Sie bietet viele Möglichkeiten wie :
-Scripting in verschiedenen Umgebungen
-Automatisierung vieler Aufgaben
-Steuern von Netzwerkoperationen
-Dateioperationen durchführen
Der Benutzer verwendet Objekte, um Operationen auf
dem Betriebssystem durchzuführen und davor müssen solche
Objekte instanziert werden und dann in Objektvariablen
gespeichert werden. Die Instanzen können mit dem NewOperator erstellt werden und haben folgende Form:
Set obj As New Klassenname
Um auf ein bestimmtes Objekt zugreifen zu können, gibt es
verschiedene Möglichkeiten. Die bekannteste erfolgt mit der
Verwendung von CreateObjekt(), die Name der Klasse
wird im Form einer Zeichenkette als Parameter eingegeben
und der ganze Befehl sieht z.B so aus:
Set o = CreateObjekt("Scripting.FileSystemObjekt")
Eine Instanz einer Klasse wird erzeugt und mittels dieser
kann auf andere bestehende Instanzen zugegriffen werden.
Eine andere Alternative hat man auch durch die Methode
GetObjekt(), indem die URL oder der Pfad zum Objekt
in Klammern angegeben wird [1].
VBS-Skripte lassen sich einfach auf neue Betriebsysteme
schreiben, indem man die Befehle in eine Textdatei schreibt
und diese mit der Endung ".vbs"speichert. Das Skript kann
beim Doppelklick auf die Datei ausgeführt werden. Der
Windows Script Host ist die Umgebung, in der die VBSSkripte interpretiert werden. Notepad, Eclipse und Primalscript
sind die bekannten Editoren für das Programmieren mit VBS.
Andere wie bei vielen Skriptsprachen wird in VBS nicht
zwischen Groß- oder Kleinschreibung unterschieden. Eine
Variable kann in VBS mit dem Schlüsselwort Dim deklariert
werden. Eine Variable muss nicht vor ihrer Verwendung
unbedingt deklariert werden. Eine Variable hat nur einen
Datentyp mit dem Namen "Variant"und kann während
des Programms verschiedene Typen haben. Hier sind die
Subtypen die von VBS unterstützt werden: Empty, Null,
Boolean, Integer, Currency, Long, Single, Double, Date,
String, Object. Hier ist ein Beispiel, das zeigt wie der Typ
einer Variablen dynamisch geändert werden kann:
Dim var ’ Variable var nicht initialisiert
’Zuweisung eines Datums
var= Now()
WScript.Echo("var ist vom Typ:
"+TypName(var))
’Zuweisung eines Strings
var= "Zeichenkette"
WScript.Echo("var ist vom Typ:
"+TypName(var))
Beim Ausführen der Skript erhalten wir folgende Ausgaben:
var ist vom Typ: Date
var ist vom Typ: String
Variablen müssen in VBS nicht am Anfang des Skriptes
deklariert werden, wie zum Beispiel in Java, sondern dies
kann mitten im Skript erfolgen. Das verschlechtert aber die
Lesbarkeit des Skripts, weswegen es eine Anweisung die das
Deklarieren der Variablen am Anfang des Skriptes erzwingt,
gibt. Das ist die Option Explicit. Diese Anweisung
muss aber die erste Zeile des Skriptes sein. Konstanten sind
Werte die sich während des Programms nicht verändern.
Diese werden mit dem Schlüsselwort const definiert. Die
Definition einer Konstanten sieht folgendermaßen aus:
const seminar = "IT-Administration"
Kommentare können mit einem Hochkomma "’"oder mit dem
Schlüsselwort REM innerhalb des Programms beschrieben
werden und helfen den Code besser zu verstehen. Es ist
empfehlenswert, die Konstanten in einem VBS-Script groß
zu schreiben oder mit einem bestimmten Präfix zu versehen,
da sie oft mit Variablen verwechselt werden können.
In VBS werden auch arithmetische, vergleichende und
logische Operatoren verwendet, wie in den anderen
Programmiersprachen auch.
C. Anwendungen der Skriptsprachen in der IT-Administration
1) Datei-Operationen: Das Kopieren, Umbenennen oder
Löschen von Dateien in der Verzeichnisstruktur des Systems
ist eine Aufgabe, mit dem wir uns täglich beschäftigen. Die
Durchführung von solchen Operationen kann sehr viel Zeit
kosten, wenn die Anzahl der Dateien hoch ist, oder die
Dateien an unterschiedlichen Stellen der Verzeichnisstruktur
des Systems liegen.
cmd.exe cmd.exe stellt für die Datei-Operationen die Kommandos Copy (Kopieren), Move (Verschieben), Delete (Löschen), Rename (Umbenennen) zur Verfügung. Die Operationen werden genauso durchgeführt, als ob man diese manuell
mit dem Windows-Explorer durchgeführt hätte. Der wesentlichste Unterschied ist, dass die Kommandos der Eingabeaufforderung nur die Verzeichnishierarchie kennen. Um Dateien
auf dem Desktop zu kopieren, muss der Pfad des Ordners
Desktop angegeben werden. Durch die Umgebungsvariable
%userprofile% lassen sich alle benutzerspezifischen Einstellungen erhalten. Dadurch kann man auf das Desktop zugreifen.
Folgendes Kommando kopiert eine Datei, z.B. Hallo.txt auf
das Desktop des aktuellen Benutzers:
copy "Hallo.text""%userprofile%\Desktop"
Auch das Verschieben von Dateien lässt sich mit einem
einzigen Zeilencode lösen:
move Quellordner\dateiname.end Zielordner
Hier wird jeweils der Pfad zum Quell- und zum Zielordner
beschrieben. Die zu verschiebende Datei muss natürlich am
Ende des Quellpfades stehen.
Mit der cmd.exe lässt sich das Löschen von bestimmten
Dateien, egal wo diese in der Verzeichnisstruktur des Systems
gespeichert sind, ganz einfach durchführen. Dies geschieht mit
dem folgenden Befehl:
@del dateiname.typ \S \F
.typ steht für einen beliebigen Datentyp. Mit dem Parameter
\S lässt sich die Datei löschen, auch wenn sie in einem
Unterverzeichnis liegt.
Windows Powershell
Für das Kopieren eines Elementes existiert der Befehl
"Copy-Item". Auch hier muss das Quell- und Zielverzeichnis
eingegeben werden.
cpi C:\Ordner\Beispiel.txt d:\test
Mit dem Platzhalterzeichen "*"anstelle eines bestimmten Ordnernamens können alle Dateien eines Ordners kopiert werden.
Das Verschieben ist auch ähnlich, nur der Befehl unterscheidet
sich:
mv C:\Ordner\Beispiel.txt d:\test
Das Cmdlet Remove-item ist vergleichbar mit dem Befehl del von der cmd.exe. Gefolgt von dem Befehl wird
nur der Pfad der zu löschenden Datei eingegeben. Der
folgende Befehl löscht die Textdatei test: Remove-Item
c:\skripte\test.txt
Man kann durch die sogenannten Platzhalterzeichen auch alle
Dateien in dem Ordner Skripte löschen:
Remove-Item c:\skripte\*
Es erscheint auf der PS-Konsole keine Bestätigung des löschvorgangs wie bei cmd.exe, aber die Datei wird tatsächlich
gelöscht.
Visual Basic Script
Durch das File System Object können mit VBS viele DateiOperationen unter Windows durchgeführt werden. Dieses
Objekt kann man verwenden nachdem eine Instanz des
Objektes Scripting.FileSystemObject erstellt wurde. Dies geht
folgendermaßen:
Inhalts einer Datei und Schreiben in eine andere Datei. Mit
Set fso = CreateObject(Scripting.FileSystemObject)
einer Batchdatei, die folgendernmaßen aussieht, lässt sich
Die Objekte des File System Objects lassen sich in drei dies erreichen:
Arten unterteilen, die den Zugang zu den Laufwerken for /f "tokens=* delims="%%a in (%1) do
(Drive), zu den Verzeichnissen (Folder) und zu Dateien im echo %%a » %2
System (File), ermöglichen. Eine Kopie von einer Datei zu Hier hat man zwei Parameter: eine Quelldatei, von der gelesen
erstellen wird ebenfalls über dieses Objekt ermöglicht, indem wird und eine Zieldatei, in der geschrieben wird. Mit Hilfe des
man die Instanz dieses Objekt benutzt und die Methode Schlüsselworts delims kann man die Trennungen zwischen
CopyFile auf der Instanz angewendet wird. Die Methode den einzelnen Token definieren. Was von den Delims getrennt
CopyFile(Quelle, Ziel[,overwrite])
nimmt ist, wird als Text von der cmd.exe interpretiert. Wie im
als Parameter 2 Pfade: Der erste ist der der zu kopierende letzten Beispiel, dient die for-Schleife zum Einlesen des
Datei, der zweite zeigt, wo die Kopie erstellt werden muss. Inhalts, der später in der Zieldatei geschrieben wird. Der
Ein optionaler Parameter overwrite ist eigentlich ein Operator "»"dient dazu, dass der eingelesene Inhalt am bereits
boolescher Wert, der angibt ob im Zielordner eine Datei existierenden Inhalt der Zieldatei angehängt wird. Ein anderer
mit gleichem Namen existiert und ob diese überschrieben Operator, der im Umgang mit Dateien auch verwendet wird,
werden muss oder nicht. Standardmäßig wird diese Datei ist ">",. Damit wird eine neue Datei angelegt. Falls die Datei
überschrieben, der overwrite-parameter ist also auf TRUE aber bereits existiert, wird sie überschrieben.
eingestellt.
Windows Powershell Bei Powershell lassen sich TextDas Löschen einer bestimmten Datei geht durch die Metho- operationen leichter als mit cmd.exe programmieren. Der
de DeleteFile des File System Objects ganz einfach:
Zugriff auf viele eingebaute Funktionen macht die Arbeit
fso.DeleteFile "C:
leichter. Das Anzeigen des Inhalts einer Textdatei geht mit dem
test.pdf ", True
Befehl Get-Content D:\myfile.txt, der direkt auf
Wenn das Parameter (force) auf False gesetzt ist, dann wird der Konsole eingegeben werden kann. Die Werte der Textdatei
die pdf-Datei test nur gelöscht, falls sie nicht schreibgeschützt werden in Powershell als eigenes Objekt interpretiert.
ist. Sonst kann man diesen Parameter auf True setzen und die
Eine weitere Möglichkeit ist eine Powershell-Datei (.ps1),
Datei wird immer gelöscht.
die den folgenden Code enthält:
Die Methode MoveFile kann man zum Verschieben von $text = Get-Content "D:\myfile.txt"
Dateien verwenden. Diese Operation kann aber immer nur Write-Output $text
innerhalb eines Laufwerks erfolgen, denn das Verschieben von Die Ausführung der Datei erfolgt, wenn man zum Verzeichnis,
Dateien außerhalb eines Laufwerkes wird von der MoveFile- indem die Datei gespeichert ist, wechselt (cd) und die Datei
Methode nicht unterstützt. Ein Befehl zum Verschieben einer mit dem folgenden Befehl aufruft : .\DateiName.ps1, der
Textdatei sieht folgendermaßen aus:
Inhalt wird auf der Konsole angezeigt.
fso.MoveFile "C:\temp\test.txt ",
Das Einlesen der Inhalte der Textdatei und das Schreiben der
"C:\ordner\temp\test.txt "
Inhalte in einer anderen Textdatei geht nach dem gleichen
Der Zielordner muss aber bereits existieren und eine Datei Prinzip:
mit dem gleichen Namen der Ausgangsdatei muss im Pfad $file1 = "D:\datei1.txt"
eingegeben werden, da die MoveFile-Methode Dateien $file2 = "D:\datei2.txt"
verschiebt und gleichzeitig umbennent [14].
$var = Get-Content $file2
2) Text-Operationen: cmd.exe
$var | Set-Content $file1
Das Ausgeben des Inhalts von Textdateien auf der Konsole Der Inhalt der Datei2 wird als Objekt in der Variable var
der cmd.exe, ist eine nützliche Operation, die man leicht mit gespeichert. Dann wird der Inhalt der Datei1 von der Variable
dem folgenden Batch-Skript durchführen kann:
überschrieben. Dies erfolgt in der letzten Zeile mit dem
{@echo off
Cmdlet Get-Content.
for /f "tokens=*"%%i in (%1) do (
Das Suchen nach einem bestimmten String in einer Textdatei
echo %%i)
lässt sich in Powershell folgendermaßen programmieren:
Die Ausführung der Batchdatei erfolgt von der cmd-Konsole param([string]$file = "file", [string]$old
aus, indem man zu den Verzeichnis wechselt, wo die Batch- = "old", [string]$new = "new")
datei gespeichert ist. Zuerst wird der Name der Batchdatei (Get-Content $file) | Foreach-Object $_
eingegeben, gefolgt von dem Pfad der Datei, deren Inhalt -replace $old,$new | Set-Content $file
angezeigt werden muss. Das ist der Parameter %1 in der Zum Ausführen des Skriptes auf bestimmte Dateien, ruft man
Batchdatei. Der Befehl kann so aussehen: batchdatei.bat den Skript wie im letzten Beispiel auf. Man gibt den Pfad
D:\myfile.txt. Dann wird der Inhalt der Textdatei auf der zur Textdatei ein, gefolgt vom String, der gesucht werden
Konsole der cmd.exe ausgegeben. Es muss definiert werden, soll, als drittes Parameter die neue Zeichenkette. Wenn das
was ein Token (oder Wort) in der Textdatei ist. Die Variable Skript korrekt aufgerufen wurde, kann man feststellen, dass
%
tatsächlich der alte String in der Datei ersetzt wurde.
Eine weitere wichtige Textoperation ist das Einlesen des Visual Basic Script
3) Prozess-Operationen: cmd.exe
Mit cmd.exe können Programme gestartet werden. Das Starten
der Programme kann in einer Batch-datei definiert werden. Für
jedes zu startende Programm sieht der Befehl folgendermaßen
aus: start C:\"Program Files"\VideoLAN\VLC\vlc.exe
Weitere Programme können von der gleichen Datei gestartet
werden. Die Befehle haben den gleichen Aufbau, nur die passenden Namen der Programme mit dem Pfad zur Ausführungsdatei (.exe) müssen stimmen. Zu beachten ist, dass Pfadstellen,
in denen Leerzeichen auftauchen unter Anführungszeichen ("")
angegeben werden müssen.
Cmd.exe bietet die Möglichkeit, alle aktiven Prozesse auf
dem Rechner anzuzeigen, ein wichtiger Schritt zur Verwaltung
dieser Prozesse. Nur durch die Eingabe von tasklist in
der Konsole der cmd.exe, lassen sich die aktiven Prozesse
anzeigen.
Manchmal ist es erforderlich ein Prozess auf einem Rechner zu beenden, um beispielsweise Probleme, die durch
ein bestimmtes Programm verursacht werden, zu vermeiden. In einer Batchdatei kann man eine Liste von Prozessen angeben, die beendet werden sollen, anstatt jedes
einzelne Programm von der cmd-Konsole zu beenden. Mit
nur einem Befehl taskkill /IM firefox.exe /IM
iexplorer lassen sich die Prozesse Firefox und Internet
Explorer beenden. Das /M bezieht sich auf den Namen des
Prozesses. Von der Konsole aus kann man diesen Befehl
ausführen.
Windows Powershell Die auf einem Rechner laufenden
Prozesse lassen sich in Powershell mit dem Cmdlet
Get-Process von der Konsole aus auflisten. Mit einer
Pipeline können die bestimmten Eigenschaften der Prozesse
im Form von Spalten aufgelistet werden. Eine mögliche
Auflistung kann durch den folgenden Befehl in der Konsole
erfolgen:
get-process | select-object name,
starttime
dann bestätigen. Es erscheinen nur zwei Spalten: eine listet
die Processnamen auf, die andere die Startzeit jedes Prozesses.
Visual Basic Script
Das Arbeiten mit anderen Programmen kann von VBS
automatisiert werden. VBS bietet die Möglichkeit, Programme
zu starten und sogar Eingaben über die Tastatur für solche
Programme zu machen. VBS greift auf die WSHShell.RunMethode des WSHShell-Objektes zu, um ein bestimmtes
Programm zu starten. Die .vbs-datei wird damit die folgenden
Befehle enthalten:
set obj = CreateObject("Wscript.shell")
obj.run("notepad.exe")
wscript.sleep(3000)
obj.sendkeys("Eingabe")
Durch die Methode sleep des WSHShell, kann gewartet
werden. Der Parameter 3000 steht für eine Wartezeit von 3
Sekunden, bevor die Methode sendkeys die Tastaturfolge an
das aktive Fenster sendet. Es öffnet sich ein Notepad-Fenster.
Nach drei Sekunden wird das Wort Eingabe getippt stehen.
Das Beenden von Programmen kann man durchführen,
indem man eine Verbindung zum WMI-System herstellt.
Die WMI liefert viele Informationen über die Prozesse.
Der folgende Code in VBS zeigt wie ein Bnutzer einen
bestimmten Process beendet:
set wmi = getobject("winmgmts:")
set procs = wmi.execquery( "select * from
win32_process where name=’notepad.exe’")
for each proc in procs
proc.terminate 0
next
Das Abfragen der Prozesse kann mittels der WMI-Klasse
win32_process erfolgen. Dann wird der Prozess mit der
Methode Terminate beendet (im Beispiel oben wird das
Programm notepad beendet).
Das Starten von Programmen erfolgt mit dem folgenden
Script:
Set WSHShell = WScript.CreateObject("WScript.Shell"
WshShell.run ("""C:\Program
Files\Programm.exe""")
Der Pfad zur Ausführungsdatei wird unter drei
Anführungszeichen gesetzt, weil VBS Leerzeichen in
Pfadnamen nicht akzeptiert. In der ersten Zeile wird das
Shellobjekt definiert. Dann wird in der zweiten Zeile mit der
Methode run() das Objekt aufgerufen, welches das Programm
startet.
4) Registry-Operationen: Die Windows registry ist ein
wichtiger Bestandteil des Betriebsystems. Dort werden Konfigurationsdaten der Programme und viele Eigenschaften gespeichert. Die Registry ist eigentlich eine Datenbank, die aus
Schlüsseln (Ordner) und Werten (Dateien) besteht. Um mit
Skriptsprachen Operationen im Registry durchzuführen, müssen die Skripte mit Administratorrechten ausgeführt werden.
Es ist empfohlen, bevor man mit den Operationen anfängt,
ein Backup für Windows zu erstellen, damit keine Programmeinstellugen während des Ausführens der Skripte verloren gehen. Nach jeder Registry-Operation sollte der Unterschlüssel,
in dem die Operation stattgefunden hat, im Registry-Editor
aktualisiert werden.
cmd.exe
REG ADD HKLM \Software\/v Wert /t REG_SZ
/d "Inhalt"
HKLM ist die Abkürzung für den Hauptschlüssel
HKey_Local_Machine. Der erstellte Wert wird in der
Unterschlüssel-Software erstellt. Dabei wird der Name als
Parameter nach dem /v definiert. Die Definition der Datentyp
und der Inhalt des Wertes im Befehl ist optional, da ein Wert
auch leer sein kann. Mit /t wird der Datentyp und mit /d
der Wert definiert. Der Inahlt des Wertes muss aber mit dem
Datentyp übereinstimmen. Nach dem ausführen des oberen
Befehls taucht der Wert wie in Abbildung 5 auf:
Das Entfernen eines Wertes läuft auch ähnlich, sogar einfacher
als das Anlegen eines neuen Schlüssels oder Wertes ab, indem
man folgenden Befehl von der cmd.exe-Konsole ausführt:
REG DELETE HKLM\Software /v Wert
Der Löschbefehl muss nochmals bestätigt werden.
[13] Die Windows Powershell im Überblick[online] Available:
http://www.edv-buchversand.de/?cnt=getchapterid=ms-5617.pdf
[14] Windows
Scripting
mit
Notepad++
[online]
Available:
http://www.datenteiler.de/windows-scripting-mit-notepad/
[15] File System Object: Arbeiten mit Dateien und Ordner [Online]
Available: http://www.vbarchiv.net/workshop/workshop_40-fso-arbeitenmit-dateien-und-ordner-teil-1.html
Abbildung 5. Der neue Wert erscheint im Registrierungseditor im Unterschlüssel Software
II. Z USAMMENFASSUNG
Die Antwort auf die Frage, welche Skriptsprache ist besser
für administrative Aufgaben geeignet ist nicht leicht. Jede
Skriptsprache hat ihre eigenen Eigenschaften. Obwohl die
cmd.exe viele Operationen effizient durchführen kann, wird
sie heutzutage von Administratoren nicht sehr bevorzugt. Das
liegt daran, dass die Arbeit mit der cmd.exe nicht leicht ist.
Der objektorientierte Ansatz von Powershell macht die Arbeit
von einem Administrator viel leichter. Anhand von Pipelining
und Cmdlets kann der Benutzer auf viele Funktionen des
Betriebssystem zugreifen, um Prozesse oder Ereignisse zu
steuern. VBS ermöglicht seinerseits auch der Zugriff auf die
COM-Komponenten und Bibliotheken der Microsoft-OfficeProgramme. Dadurch kann man viele Aufgaben in einem
Windows-Betriebsystem automatisieren.
L ITERATUR
[1] Windows Scripting lernen-Von Windows Script Host und Visual Basic
Script bis zur Windows PowerShell. Holger Schwichtenberg
[2] Microsoft Windows 2000 – Scripting-Handbuch (Teil 1) ScriptingKonzepte und -Technologien zur Systemadministration. Kapitel 3 – Der
Windows Script Host
[3] Windows Scripting- Automatisierte Systemadministration mit dem Windows Script Host 5.8 und der Windows PowerShell 2.0. Holger Schwichtenberg
[4] Übersicht Über Windows-Skripts an Hand von Beispielen [online]
Available: http://homepages.fh-giessen.de/h̃g54/seminar_2004/seminar_2004_stecker.pdf
[5] IT-Handbuch für Fachinformatiker- Galileo Computing-Sasha Kersken
[6] TechNet Magazine- Die Scripting Guys von Microsoft [online]
Available:
http://technet.microsoft.com/dede/magazine/2006.12.heyscriptingguy.aspx
[7] Scriptsprachen-Inga Eckermann [online]
Available: http://transfer.tr.fh-hannover.de/person/becher/edvhist/sprachen/scriptsprachen.html
[8] Einbinden
von
Skripten
in
HTML
[online]
Available:
http://www.teialehrbuch.de/Kostenlose-Kurse/HTML/3395-Einbindenvon-Skripten-in-HTML.html
[9] Gefahren und Risiken im Umgang mit VBScript [online] Available:
https://www.bsi.bund.de/DE/Home/home_node.html
[10] Was
sind
Skriptsprachen?
[online]
Available:
https://www.bg.bib.de/portale/bes/Progentwicklung/Programmiersprachen/Programmiersprachen79.htm
[11] IT-Wissen
Script
language
[online]
Available:
http://www.itwissen.info/definition/lexikon/Scriptsprache-scriptlanguage.html
[12] Die Visual Basic Scripting-Umgebung [online] Available:
http://www.selfadsi.de/script.htm
Herunterladen