指令碼中繼資料

為能在 Security Controls 中使用指令碼,指令碼必須包含能唯一識別其本身的中繼資料,以及說明其本身的功能和輸入參數。 本節將說明如何建立該中繼資料。

讓我們先從具有一個輸入參數的簡易單行指令碼開始:

Get-Service $serviceName -ComputerName "$ST_ComputerName"

具有 Security Controls 所需中繼資料的完整指令碼如下所示。 某些資訊是選擇性的,稍後將詳細說明每個元素。

<#

<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>Get the services on the target machine</purpose>

<inputs>Wildcard of service name</inputs>

<outputs>List of installed services</outputs>

</description>

<parameters>

<parameter>

<name>serviceName</name>

<description> Wildcard service(s) to query </description>

<default>”*”</default>

</parameter>

</parameters>

</stScript>

#>

Get-Service $serviceName -ComputerName "$ST_ComputerName"

中繼資料區塊

中繼資料是指令碼註解內部的一個 XML 片段。

指令碼註解分隔符號為「<#」和「#>」。基於我們的目的,這些分隔符號必須獨自位於一行並從資料行 1 開始。

XML 文件的根元素為 "stScript"。 其具有一項屬性,就是指令碼的唯一識別碼。 這是全域唯一識別碼 (GUID)。 GUID 是由 32 個十六進位字元所指定,格式為 "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"。 有許多的標準工具可用來產生 GUID。

開始和結束元素都必須獨自位於一行,並從資料行 1 開始。 因此,Security Controls 中使用的所有指令碼都應以這兩行開始 (每個指令碼都取代一個不同的 GUID):

<#

<stScript uid="d0d3c64c-19a3-4879-9396-ac8769d60c9c">

並以這兩行結束:

</stScript>

#>

其他元素應依照以下所述順序出現。

name

這個必要元素提供顯示在 Security Controls 中的指令碼名稱。 名稱必須介於 1 到 100 個字元之間。 名稱可包含空格和特殊字元。

範例:

<name>GetServices</name>

version

這個必要的元素會指定指令碼的版本。 版本是由四個整數數字所指定,並以句號區隔。 當您修改指令碼時,較新的版本必須大於您之前已使用的任何版本。

範例:

<version>1.0.0.0</version>

author

這個必要的元素可用來識別指令碼的作者。 依慣例,它會使用作者的名稱或公司的名稱。 此欄位必須介於 1 至 256 個字元之間且不得為空白。

範例:

<author>My Company</author>

scriptType

這個必要的元素會指定指令碼執行的類型。 它具有一個必要的屬性 "type" 且其必須包含下列其中一項:

  • type=“any” 表示指令碼會針對一個或多個目標電腦執行,但不需要 PowerShell 遠端。 這是最常見的指令碼類型,同時也是未指定 scriptType 元素時的預設值。
  • type=”consoleOnly” 表示指令碼不會針對一組目標電腦執行。 此類型的指令碼無法針對電腦群組或選取的電腦執行。 只有當您在 Security Controls 功能表中選取「工具 > 執行控制台 ITScript」時,這類指令碼才會出現在可用的指令碼中。
  • type=”remote” 表示指令碼會針對一個或多個目標電腦執行,且 PowerShell 遠端必須在目標電腦上可用及進行設定。
  • type=”esxServer” 表示指令碼將針對 ESXi Server 或 vCenter Server 執行。 此類型的指令碼僅針對包含 ESXi Server 的電腦群組執行。 如果電腦群組包含其他任何電腦,則此指令碼執行時,將忽略這些電腦。

範例:

<scriptType type="any" />

minEngineVersion

這個選擇性元素會指定執行此指令碼所需的最低 ITScript 引擎版本。 若未指定,則應寫入指令碼以執行任何版本的 ITScript 引擎。

範例:

<minEngineVersion>8.0.0.0</minEngineVersion>

modifiedTarget

這個選擇性元素表示指令碼是否對目標電腦進行任何修改。 若未指定,則會預設為 "false",表示指令碼只會收集資訊但不會修改目標電腦。 這僅做為說明文件用途。 該值並不保證指令碼不會修改目標電腦。

範例:

<modifiesTarget>false</modifiesTarget>

options

這個選擇性元素與其四個子元素會告訴 ITScript 引擎應產生哪些標準輸出檔案。 依預設,引擎將會產生下列標準輸出檔案:

  • runoutput.txt: 若產生任何執行輸出,表示一個檔案代表整個執行
  • runerror.txt: 若偵測到錯誤,表示一個檔案代表整個執行
  • machineoutput.txt: 若產生任何電腦輸出,表示一個檔案代表每個目標電腦
  • machineerror.txt: 若偵測到錯誤,表示一個檔案代表每個目標電腦

若您在中繼資料中指定如下項目,則不會產生 runoutput.txt 和 runerror.txt 檔案:

<option name="OutputRunResults" value="false" />

若您在中繼資料中指定如下項目,則不會產生 machineoutput.txt 和 machineerror.txt 檔案:

<option name="OutputMachineResults" value="true" />

若您想要將所有電腦的 machineoutput.txt 檔案串連至 runoutput.txt 檔案,並將所有 machineerror.txt 檔案串連至 runerror.txt,可指定此選項:

<option name="CombineOutputFiles" value="true" />

若您選擇結合個別電腦輸出和錯誤檔案,可選擇透過指定如下項目刪除個別檔案:

<option name="DeleteMachineFiles" value="true" />

範例:

<options>

<option name="OutputMachineResults" value="true" />

<option name="OutputRunResults" value="true" />

<option name="CombineOutputFiles" value="false" />

<option name="DeleteMachineFiles" value="false" />

</options>

concurrency

這個選擇性元素可指定在針對一組目標電腦執行指定碼時,要使用的預設最高並行層級。 您可以建立一個 ITScript 範本並指定不同的並行值以覆寫 Security Controls 中的值。 若未指定,則預設的最大並行數會設為 32。

範例:

<concurrency default="16" />

description

"description" 元素與其四個子元素都是必要元素。 在此輸入的資訊將會顯示於 Security Controls 中。

category

必要的 "category" 元素是 description 元素的子系。 category 可協助您組織指令碼。 類別必須介於 1 到 50 個字元之間。 標準類別包括:「組態」、「群組原則」、「資訊」、「維護」、「監視」和「支援」。

purpose

必要的 "purpose" 元素也是 description 元素的子系。 其必須包含 1 到 1024 個字元。 它應精準且正確地描述指令碼的用途。

inputs

必要的 "inputs" 元素也是 description 元素的子系。 其必須包含 1 到 1024 個字元。 它應正確地描述指令碼所需的輸入參數。 如果沒有任何輸入參數,也可以直接指定 "None"。

outputs

必要的 "outputs" 元素也是 description 元素的子系。 其必須包含 1 到 1024 個字元。 它應正確地描述指令碼所產生的輸出。

範例:

<description>

<category>Information</category>

<purpose>Get the services on the target machine</purpose>

<inputs>Wildcard of service name</inputs>

<outputs>List of installed services</outputs>

</description>

parameters

若指令碼需要任何輸入參數,則必須指定 "parameters" 元素。 每個輸入參數都必須有一個 "parameters" 子元素。 每個 "parameters" 元素都必須有三個子元素:

  • name: 沒有前置 '$' 的輸入參數名稱。 該名稱必須是在指令碼中使用的有效 PowerShell 變數名稱。
  • description: 此描述將顯示在 Security Controls 中。
  • default: 此元素會指定將用於參數的預設參數值,除非使用者已在範本中指定替代的值,或者目前正在啟動或排程指令碼執行。 若預設值為字串,則使用撇號或引號將其括住。 撇號可讓字串包含在 PowerShell 中具有特殊意義的字元,例如 $ 和引號。 若要在引號中嵌入字元,請在前方加上 (`) 字元。

範例:

<parameters>

<parameter>

<name>serviceName</name>

<description>Wildcard service(s)to find</description>

<default>”*”</default>

</parameter>

</parameters>