Skriptmetadaten
Damit ein Skript in Security Controls verwendet werden kann, muss das Skript Metadaten enthalten, die es eindeutig identifizieren und seine Funktionalität und Eingabeparameter beschreiben. In diesem Abschnitt wird erläutert, wie diese Metadaten erstellt werden.
Beginnen wir mit einem einfachen einzeiligen Skript mit einem Eingabeparameter:
Get-Service $serviceName -ComputerName "$ST_ComputerName"
Das vollständige Skript, mit den von Security Controls benötigten Metadaten, ist unten dargestellt. Einige der Informationen sind optional. Die einzelnen Elemente werden später noch ausführlicher beschrieben.
<#
<stScript uid="d0d3c64c-19a3-4879-9396-ac8769d60c9c">
<name>GetServices</name>
<version>1.0.0.0</version>
<author>My Company</author>
<scriptType type="any" />
<minEngineVersion>8.0.0.0</minEngineVersion>
<modifiesTarget>false</modifiesTarget>
<options>
<option name="OutputMachineResults" value="true" />
<option name="OutputRunResults" value="true" />
<option name="CombineOutputFiles" value="false" />
<option name="DeleteMachineFiles" value="false" />
</options>
<concurrency default="16" />
<description>
<category>Information</category>
<purpose>Dienste auf dem Zielcomputer abrufen</purpose>
<inputs>Platzhalter für Dienstname</inputs>
<outputs>Liste der installierten Dienste</outputs>
</description>
<parameters>
<parameter>
<name>Servicename</name>
<description> Abzufragende Platzhalterdienste </description>
<default>”*”</default>
</parameter>
</parameters>
</stScript>
#>
Get-Service $serviceName -ComputerName "$ST_ComputerName"
Metadatenblock
Bei den Metadaten handelt es sich um ein XML-Fragment innerhalb eines Skriptkommentars.
Als Trennzeichen für Skriptkommentare werden "<#" und "#>" verwendet. Für unsere Zwecke müssen sich diese Trennzeichen auf einer eigenen Zeile befinden und in Spalte 1 beginnen.
Das Stammelement des XML-Dokuments ist "stScript". Es verfügt über ein Attribut, die eindeutige Kennung des Skripts. Dabei handelt es sich um einen globalen eindeutigen Bezeichner (GUID). Eine GUID besteht aus 32 Hexadezimalzeichen im Format "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx". Es gibt zahlreiche Standardtools zum Generieren von GUIDs.
Die Anfangs- und Schlusselemente müssen sich auf einer eigenen Zeile befinden, beginnend mit Spalte 1. Daher sollten alle in Security Controls verwendeten Skripte mit den folgenden zwei Zeilen beginnen (wobei für jedes Skript eine andere GUID ersetzt wird):
<#
<stScript uid="d0d3c64c-19a3-4879-9396-ac8769d60c9c">
Die Skripte müssen mit den folgenden zwei Zeilen enden:
</stScript>
#>
Die anderen Elemente müssen in der unten beschriebenen Reihenfolge aufgeführt werden.
Umbenennen
Dieses erforderliche Element gibt den Namen des Skripts an, der innerhalb von Security Controls verwendet wird. Der Name muss zwischen 1 und 100 Zeichen enthalten. Der Name darf Leerzeichen und Sonderzeichen beinhalten.
Beispiel:
<name>DiensteAbrufen</name>
Version
Dieses erforderliche Element gibt die Version des Skripts an. Die Version wird in vier Ganzzahlen dargestellt, die durch einen Punkt voneinander getrennt sind. Wenn Sie ein Skript modifizieren, muss die neuere Version höher sein, als die vorherigen von Ihnen verwendeten Versionen.
Beispiel:
<version>1.0.0.0</version>
author
Dieses erforderliche Element gibt den Verfasser des Skripts an. Üblicherweise wird an dieser Stelle entweder der Name des Verfassers oder der Name des Unternehmens verwendet. Das Feld muss zwischen 1 und 256 Zeichen enthalten und darf nicht leer gelassen werden.
Beispiel:
<author>My Company</author>
scriptType
Dieses optionale Element gibt den Typ der Skriptausführung an. Es enthält das erforderliche Attribut "type", für das eine der folgenden Einstellungen festgelegt werden muss:
- type="any" gibt an, dass das Skript auf einem oder mehreren Zielcomputern ausgeführt wird. Es ist jedoch kein PowerShell Remoting erforderlich. Dies ist der gängigste Skripttyp. Er wird standardmäßig verwendet, wenn kein scriptType-Element angegeben ist.
- type="consoleOnly" gibt an, dass das Skript nicht auf einem Satz von Zielcomputern ausgeführt wird. Dieser Skripttyp kann nicht auf Computergruppen oder ausgewählten Computern ausgeführt werden. Ein solches Skript wird nur dann bei den verfügbaren Skripten angezeigt, wenn Sie "Tools > Konsolen-ITScripts ausführen" im Security Controls-Menü auswählen.
- type="remote" gibt an, dass das Skript auf einem oder mehreren Zielcomputern ausgeführt wird. Dazu muss PowerShell Remoting auf den Zielcomputern verfügbar und konfiguriert sein.
- type="esxServer" gibt an, dass das Skript auf einem ESXi-Server oder einem vCenter-Server ausgeführt wird. Skripts dieser Art können nur für Computergruppen ausgeführt werden, die ESXi Server enthalten. Wenn die Computergruppe auch andere Computer enthält, werden diese bei der Ausführung des Skripts ignoriert.
Beispiel:
<scriptType type="any" />
minEngineVersion
Dieses optionale Element gibt die Mindestversion des ITScripts-Moduls an, die zum Ausführen des Skripts erforderlich ist. Falls kein Wert angegeben wird, muss das Skript so geschrieben sein, dass es mit einer beliebigen Version des ITScripts-Moduls ausgeführt werden kann.
Beispiel:
<minEngineVersion>8.0.0.0</minEngineVersion>
modifiedTarget
Dieses optionale Element gibt an, ob das Skript Modifizierungen an den Zielcomputern vornimmt. Falls keine Angabe erfolgt, wird standardmäßig "false" interpretiert. Das Skript erfasst also Informationen, nimmt jedoch keine Änderungen an den Zielcomputern vor. Dies dient lediglich zu Dokumentationszwecken. Der Wert des Elements garantiert nicht, dass das Skript keine Änderungen an den Zielcomputern vornimmt.
Beispiel:
<modifiesTarget>false</modifiesTarget>
Optionen
Dieses optionale Element sowie die vier zugehörigen Unterelemente geben dem ITScripts-Modul vor, welche Standardausgabedateien generiert werden sollen. Standardmäßig generiert das Modul die folgenden Ausgabedateien:
- runoutput.txt: Eine Datei für den gesamten Durchlauf, falls eine Durchlaufausgabe generiert wird.
- runerror.txt: Eine Datei für den gesamten Durchlauf, falls Fehler erkannt wurden.
- machineoutput.txt: Eine Datei für den Zielcomputer, falls eine Computerausgabe generiert wird.
- machineerror.txt: Eine Datei für jeden Zielcomputer, falls Fehler erkannt wurden.
Wenn Sie Folgendes in den Metadaten festlegen, werden die Dateien "runoutput.txt" und "runerror.txt" nicht generiert:
<option name="OutputRunResults" value="false" />
Wenn Sie Folgendes in den Metadaten festlegen, werden die Dateien "machineoutput.txt" und "machineerror.txt" nicht generiert:
<option name="OutputMachineResults" value="true" />
Legen Sie folgende Option fest, wenn Sie möchten, dass alle machineoutput.txt-Dateien für alle Computer in einer runoutput.txt-Datei und alle machineerror.txt-Dateien in einer runerror.txt-Datei zusammengefasst werden:
<option name="CombineOutputFiles" value="true" />
Falls Sie die einzelnen Computerausgabedateien und Fehlerdateien kombinieren, können Sie die Einzeldateien löschen, indem Sie Folgendes angeben:
<option name="DeleteMachineFiles" value="true" />
Beispiel:
<options>
<option name="OutputMachineResults" value="true" />
<option name="OutputRunResults" value="true" />
<option name="CombineOutputFiles" value="false" />
<option name="DeleteMachineFiles" value="false" />
</options>
Parallelität
Dieses optionale Element gibt an, welche maximale Parallelitätsstufe verwendet werden soll, wenn das Skript auf mehreren Zielcomputern ausgeführt wird. Sie können dies in Security Controls außer Kraft setzen, indem Sie eine ITScripts-Vorlage erstellen und einen anderen Parallelitätswert angeben. Falls keine Angabe erfolgt, wird der maximale Parallelitätswert standardmäßig auf 32 festgelegt.
Beispiel:
<concurrency default="16" />
Description
Das Element "description" sowie seine vier Unterelemente sind erforderlich. Die hier eingegebenen Informationen werden in Security Controls angezeigt.
Kategorie
Das erforderliche Element "category" ist ein untergeordnetes Element des Elements "description". Die Kategorie erleichtert die Organisation Ihrer Skripte. Die Kategorie muss zwischen 1 und 50 Zeichen enthalten. Standardkategorien sind beispielsweise "Konfiguration", "Gruppenrichtlinie", "Informationen", "Wartung" und "Support".
purpose
Das erforderliche Element "purpose" ist ein untergeordnetes Element des Elements "description". Es muss zwischen 1 und 1.024 Zeichen enthalten. Es sollte knapp aber genau beschreiben, wozu das Skript verwendet wird.
inputs
Das erforderliche Element "inputs" ist ein untergeordnetes Element des Elements "description". Es muss zwischen 1 und 1.024 Zeichen enthalten. Es sollte genau beschreiben, welche Eingabeparameter das Skript erfordert. Wenn es keine Eingabeparameter gibt, geben Sie "None" an.
outputs
Das erforderliche Element "outputs" ist ein untergeordnetes Element des Elements "description". Es muss zwischen 1 und 1.024 Zeichen enthalten. Es sollte genau beschreiben, welche Ausgabe das Skript generiert.
Beispiel:
<description>
<category>Information</category>
<purpose>Dienste auf dem Zielcomputer abrufen</purpose>
<inputs>Platzhalter für Dienstname</inputs>
<outputs>Liste der installierten Dienste</outputs>
</description>
Parameter
Das Element "parameters" muss angegeben werden, wenn das Skript Eingabeparameter verlangt. Für jeden Eingabeparameter muss ein untergeordnetes Element vom Typ "parameter" vorhanden sein. Jedes Element vom Typ "parameter" muss über drei untergeordnete Elemente verfügen:
- name: Der Name des Eingabeparameters ohne vorangestelltes '$'. Bei dem Namen muss es sich um den im Skript verwendeten, gültigen Namen der PowerShell-Variable handeln.
- description: Diese Beschreibung wird in Security Controls angezeigt.
- default: Dieses Element legt den für den Parameter in einer Vorlage oder beim Starten oder Planen der Skriptausführung zu verwendenden Standardwert fest, sofern der Benutzer keinen anderen Wert bestimmt. Falls es sich bei dem Standardwert um eine Zeichenfolge handelt, setzen Sie diese zwischen Apostrophe oder Anführungszeichen. Apostrophe sorgen dafür, dass die Zeichenfolge Zeichen enthalten darf, die in PowerShell eine spezielle Bedeutung haben, z. B. $ und Anführungszeichen. Stellen Sie diesen Zeichen ein Strichzeichen voran (`), um sie zwischen Anführungszeichen einzubetten.
Beispiel:
<parameters>
<parameter>
<name>Servicename</name>
<description> Zu suchende Platzhalterdienste </description>
<default>”*”</default>
</parameter>
</parameters>