脚本元数据
为使脚本在 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 服务器或 vCenter 服务器运行。 此类型的脚本仅针对包含 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
此可选元素指定在针对一组目标计算机执行脚本时要使用的默认最大并发级别。 您可以在 Security Controls 中覆盖此内容,方法是创建 ITScript 模板并指定不同的并发值。 如果未指定,则默认最大并发设置为 32。
示例:
<concurrency default="16" />
description
"description" 元素及其四个子元素都必不可少。 在此处输入的信息将显示在 Security Controls 中。
category
必需的 "category" 元素是 description 元素的子元素。 类别帮助组织您的脚本。 类别必须在 1 至 50 个字符之间。 标准类别可能包括:“配置”、“策略组”、“信息”、“维护”、“监控”和“支持”。
purpose
必需的 "purpose" 元素是 description 元素的子元素。 它必须包含 1 至 1024 个字符。 它应包含简洁准确的描述,说明脚本的用途。
inputs
必需的 "inputs" 元素是 description 元素的子元素。 它必须包含 1 至 1024 个字符。 此元素应准确描述脚本所需的输入参数。 如果没有输入参数,可以指定“无”。
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" 元素。 每个输入参数必须有一个 "parameter" 子元素。 每个 "parameter" 元素必须有三个子元素:
- name:输入参数名称,前面不带 '$'。 名称必须为脚本中使用的有效的 PowerShell 变量名称。
- description:此描述将出现在 Security Controls 中。
- default:此元素指定将用于参数的默认参数值,除非用户在模板中或者在开始或计划脚本执行时指定替代值。 如果默认值为字符串,则用撇号或引号将其括起来。 撇号让字符串能包含在 PowerShell 中具有特殊含义的字符,例如 $ 和引号。 要将此类字符嵌入引号中,请在其前面添加波浪字符 (`)。
示例:
<parameters>
<parameter>
<name>serviceName</name>
<description>Wildcard service(s)to find</description>
<default>”*”</default>
</parameter>
</parameters>