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