适用于: Configuration Manager(current branch)
Configuration Manager具有运行 PowerShell 脚本的集成功能。 PowerShell 的优点是创建复杂的自动化脚本,这些脚本可以理解并与更大的社区共享。 这些脚本简化了用于管理软件的自定义工具的生成,使你能够快速完成平凡的任务,使你能够更轻松地、更一致地完成大型作业。
在版本 2006 及更低版本中,Configuration Manager默认情况下不启用此可选功能。 在使用此功能之前,必须启用此功能。 有关详细信息,请参阅
从更新启用可选功能
。
通过 Configuration Manager 中的此集成,可以使用
“运行脚本”
功能执行以下操作:
创建和编辑用于 Configuration Manager 的脚本。
通过角色和安全作用域管理脚本使用情况。
在集合或单个本地托管 Windows 电脑上运行脚本。
从客户端设备获取快速聚合的脚本结果。
监视脚本执行并查看脚本输出的报告结果。
鉴于脚本的强大功能,我们提醒你谨慎使用脚本。 我们内置了额外的安全措施来帮助你:隔离的角色和范围。 在运行脚本之前,请务必验证脚本的准确性,并确认它们来自受信任的源,以防止意外执行脚本。 请注意扩展字符或其他模糊处理,并告知自己如何保护脚本。
详细了解 PowerShell 脚本安全性
某些反恶意软件可能会无意中触发针对Configuration Manager运行脚本或 CMPivot 功能的事件。 建议排除 %windir%\CCM\ScriptStore,以便反恶意软件允许这些功能在没有干扰的情况下运行。
要运行 PowerShell 脚本,客户端必须运行 PowerShell 3.0 或更高版本。 但是,如果运行的脚本包含更高版本的 PowerShell 的功能,则运行该脚本的客户端必须运行该版本的 PowerShell。
Configuration Manager客户端必须运行 1706 或更高版本中的客户端才能运行脚本。
要使用这些脚本,你必须是相应 Configuration Manager 安全角色的成员。
若要导入和创作脚本 - 你的帐户必须具有
SMS 脚本
的“创建
”权限。
若要批准或拒绝脚本 - 帐户必须具有
短信脚本
的“批准”
权限。
若要运行脚本 - 你的帐户必须具有
“集合
”的“运行脚本
”权限。
有关Configuration Manager安全角色的详细信息:
运行脚本的安全作用域运行脚本
的安全角色
基于角色的管理基础知识
。
运行脚本当前支持:
脚本语言:PowerShell
参数类型:整数、字符串和列表。
请注意,使用参数时,它会打开潜在的 PowerShell 注入攻击风险的外围应用。 有多种缓解和解决方法,例如使用正则表达式验证参数输入或使用预定义参数。 常见的最佳做法是不要在 PowerShell 脚本中包含机密 (无密码等) 。
详细了解 PowerShell 脚本安全性
运行脚本作者和审批者
运行脚本使用
脚本作者
和
脚本审批者
的概念作为实现和执行脚本的单独角色。 将作者和审批者角色分开后,可以对运行脚本的强大工具进行重要的过程检查。 还有一个额外的
脚本运行程序
角色,它允许执行脚本,但不允许创建或批准脚本。 请参阅
为脚本创建安全角色
。
脚本角色控制
默认情况下,用户无法批准他们创作的脚本。 由于脚本功能强大、用途广泛,并且可能部署到许多设备,因此你可以将脚本的作者和批准脚本的人员之间的角色分开。 这些角色提供了额外的安全级别,防止在没有监督的情况下运行脚本。 为了便于测试,你可以关闭辅助审批。
批准或拒绝脚本
脚本必须经过
脚本审批者
角色的批准,然后才能运行脚本。 若要批准脚本,请执行以下操作:
在Configuration Manager控制台中,单击“
软件库
”。
在
“软件库
”工作区中,单击“
脚本
”。
在
“脚本
”列表中,选择要批准或拒绝的脚本,然后在“
开始
”选项卡上的“
脚本
”组中,单击“
批准/拒绝
”。
在“
批准或拒绝脚本
”对话框中,为脚本选择“
批准
”或
“拒绝
”。 (可选)输入有关决策的注释。 如果拒绝脚本,则无法在客户端设备上运行该脚本。
完成该向导。 在
“脚本
”列表中,可以看到“
审批状态
”列会根据你执行的操作而更改。
允许用户批准自己的脚本
此审批主要用于脚本开发的测试阶段。
在Configuration Manager控制台中,单击“
管理
”。
在
“管理
”工作区中,展开“
站点配置”
,然后单击“
站点
”。
在站点列表中,选择您的网站,然后在“
主页
”选项卡上的“
网站
”组中,单击“
层次结构设置
”。
在“
层次结构设置属性
”对话框的“
常规
”选项卡上,清除“
脚本作者需要其他脚本审批者
”复选框。
最佳做法是,不应允许脚本作者批准自己的脚本。 应仅在实验室设置中允许它。 仔细考虑在生产环境中更改此设置的潜在影响。
运行脚本使用安全作用域(Configuration Manager的现有功能)通过分配表示用户组的标记来控制脚本的创作和执行。 有关使用安全作用域的详细信息,请参阅
为Configuration Manager配置基于角色的管理
。
为脚本创建安全角色
默认情况下,在 Configuration Manager 中不会创建用于运行脚本的三个安全角色。 若要创建脚本运行程序、脚本作者和脚本审批者角色,请按照概述的步骤操作。
在Configuration Manager控制台中,转到
“管理
>
安全
角色”
>
右键单击某个角色,然后单击“
复制
”。 复制的角色已分配有权限。 请确保仅获取所需的权限。
为自定义角色提供
“名称”
和
“说明
”。
为安全角色分配下面概述的权限。
安全角色权限
角色名称
:脚本运行程序
说明
:这些权限使此角色只能运行以前由其他角色创建和批准的脚本。
权限:
确保将以下内容设置为
“是
”。
在Configuration Manager控制台中,单击“
软件库
”。
在
“软件库
”工作区中,单击“
脚本
”。
在“
开始
”选项卡上的“
创建
”组中,单击“
创建脚本
”。
在“创建
脚本”
向导的“
脚本”
页上,配置以下设置:
-
脚本名称
- 输入脚本的名称。 虽然可以创建具有相同名称的多个脚本,但使用重复名称会使你在 Configuration Manager 控制台中找到所需的脚本更加困难。
-
脚本语言
- 目前仅支持 PowerShell 脚本。
-
导入
- 将 PowerShell 脚本导入控制台。 脚本显示在
“脚本”
字段中。
-
Clear
- 从“脚本”字段中删除当前脚本。
-
脚本
- 显示当前导入的脚本。 可以根据需要编辑此字段中的脚本。
-
完成该向导。 新脚本显示在
“脚本
”列表中,状态为
“正在等待审批
”。 在客户端设备上运行此脚本之前,必须对其进行批准。
使用“运行脚本”功能时,请避免编写设备重新启动脚本或重启Configuration Manager代理的脚本。 这样做可能会导致连续重新启动状态。 如果需要,可以增强客户端通知功能,以启用重启设备。
挂起的重启列
可帮助识别需要重启的设备。
将参数添加到脚本可提高工作的灵活性。 最多可以包含 10 个参数。 下面概述了运行脚本功能的当前功能,其中包含的脚本参数:
字符串
、
整数
数据类型。 预设值的列表也可用。 如果脚本的数据类型不受支持,则会收到警告。
在
“创建脚本
”对话框中,单击“
脚本”
下的“
脚本
参数”。
每个脚本参数都有其自己的对话框,用于添加进一步的详细信息和验证。 如果脚本中存在默认参数,则会在参数 UI 中枚举该参数,并且可以对其进行设置。 Configuration Manager不会覆盖默认值,因为它永远不会直接修改脚本。 可以将其视为 UI 中提供了“预填充的建议值”,但Configuration Manager在运行时不提供对“默认”值的访问权限。 可以通过编辑脚本以使用正确的默认值来解决此问题。
参数值不能包含单引号。 存在一个已知问题,即包含或括在单引号中的参数值无法正确传递给脚本。 指定包含脚本中空格的默认参数值时,请改用双引号。 在创建或执行
脚本
期间指定默认参数值时,无论值是否包含空格,都不需要用双引号或单引号括起默认值。
脚本中的每个参数都有一个
“脚本参数属性
”对话框,用于添加该参数的验证。 添加验证后,如果要为不符合验证条件的参数输入值,则会收到错误。
示例:
FirstName
在此示例中,可以设置字符串参数
FirstName
的属性。
“
脚本参数属性
”对话框的“验证”部分包含以下字段供你使用:
-
最小长度
-
FirstName
字段的最小字符数。
-
最大长度
-
FirstName
字段的最大字符数
-
正则表达式
-
正则表达式
的缩写。 有关使用正则表达式的详细信息,请参阅下一节
:使用正则表达式验证
。
-
自定义错误
- 可用于添加自己的自定义错误消息,以取代任何系统验证错误消息。
使用正则表达式验证
正则表达式是一种紧凑形式的编程,用于根据编码验证检查字符串。 例如,可以通过将“正
则表达式
”字段置于
[^A-Z]
“FirstName”字段中来检查
“FirstName
”字段中是否存在大写字母字符。
.NET Framework支持此对话框的正则表达式处理。 有关使用正则表达式的指南,请参阅
.NET 正则表达式
和
正则表达式语言
。
下面是几个示例,演示了你可能想要与此功能一起使用的脚本。
创建新文件夹和文件
根据命名输入,此脚本会在文件夹中创建一个新文件夹和一个文件。
Param(
[Parameter(Mandatory=$True)]
[string]$FolderName,
[Parameter(Mandatory=$True)]
[string]$FileName
New-Item $FolderName -type directory
New-Item $FileName -type file
获取 OS 版本
此脚本使用 WMI 来查询计算机的 OS 版本。
Write-Output (Get-WmiObject -Class Win32_operatingSystem).Caption
编辑或复制 PowerShell 脚本
可以 编辑 或 复制 与 “运行脚本” 功能一起使用的现有 PowerShell 脚本。 现在直接编辑脚本,而不是重新创建需要更改的脚本。 这两个操作使用与创建新脚本时相同的向导体验。 编辑或复制脚本时,Configuration Manager不会保留审批状态。
不要编辑在客户端上主动运行的脚本。 它们不会完成原始脚本的运行,你可能无法从这些客户端获得预期结果。
转到“软件库”工作区下的“脚本”节点。
选择要编辑的脚本,然后单击功能区中的“ 编辑 ”。
在“脚本详细信息”页中更改或重新导入 脚本 。
单击 “下一步 ”查看 “摘要” ,然后在完成编辑后 单击“关闭 ”。
转到“软件库”工作区下的“脚本”节点。
选择要复制的脚本,然后单击功能区中的“ 复制 ”。
在“ 脚本名称 ”字段中重命名脚本,然后进行可能需要的任何其他编辑。
单击 “下一步 ”查看 “摘要” ,然后在完成编辑后 单击“关闭 ”。
脚本获得批准后,可以针对单个设备或集合运行该脚本。 开始执行脚本后,它会通过一小时内超时的高优先级系统快速启动。 然后,使用状态消息系统返回脚本的结果。
若要为脚本选择目标集合,请执行以下操作:
在Configuration Manager控制台中,单击“资产和符合性”。
在“资产和符合性”工作区中,单击“ 设备集合”。
在 “设备集合” 列表中,单击要运行脚本的设备集合。
选择所选的集合,单击“ 运行脚本”。
在“运行脚本”向导的“脚本”页上,从列表中选择一个脚本。 仅显示已批准的脚本。
单击“ 下一步”,然后完成向导。
如果脚本未运行(例如,因为目标设备在一小时内关闭),则必须再次运行它。
目标计算机执行
脚本作为目标客户端上的 系统 或 计算机 帐户执行, () 。 此帐户的网络访问权限有限。 必须相应地预配脚本对远程系统和位置的任何访问。
在设备集合上启动运行脚本后,使用以下过程监视操作。 可以在脚本执行时实时监视脚本,并在稍后返回给定运行脚本执行的状态和结果。 脚本状态数据作为 删除过期客户端操作维护任务 或删除脚本的一部分进行清理。
在Configuration Manager控制台中,单击“监视”。
在 “监视 ”工作区中,单击“ 脚本状态”。
在 “脚本状态” 列表中,可以查看在客户端设备上运行的每个脚本的结果。 脚本退出代码 0 通常表示脚本已成功运行。
客户端的返回脚本输出使用 JSON 格式,方法是将脚本的结果管道到 ConvertTo-Json cmdlet。 JSON 格式始终返回可读脚本输出。 对于不将对象作为输出返回的脚本,ConvertTo-Json cmdlet 会将输出转换为客户端返回的简单字符串,而不是 JSON。
获取未知结果或客户端脱机位置的脚本不会显示在图表或数据集中。
避免返回大型脚本输出,因为它被截断为 4 KB。
将枚举对象转换为脚本中的字符串值,以便它们以 JSON 格式正确显示。
可以原始或结构化 JSON 格式查看详细的脚本输出。 此格式设置使输出更易于阅读和分析。 如果脚本返回有效的 JSON 格式文本,或者可以使用 ConvertTo-Json PowerShell cmdlet 将输出转换为 JSON,则以 JSON 输出 或 原始输出的形式查看详细输出。 否则,唯一的选项是 “脚本输出”。
示例:脚本输出可转换为有效的 JSON
命令: $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 16299 551
示例:脚本输出无效的 JSON
命令: Write-Output (Get-WmiObject -Class Win32_OperatingSystem).Caption
Microsoft Windows 10 Enterprise
在客户端上,默认情况下,C:\Windows\CCM\logs:
Scripts.log
CcmMessaging.log
在 MP 上,默认为 C:\SMS_CCM\Logs:
MP_RelayMsgMgr.log
在站点服务器上,默认情况下,C:\Program Files\Configuration Manager\Logs:
SMS_Message_Processing_Engine.log
使用Windows PowerShell实现自动化
可以使用以下 PowerShell cmdlet 自动执行其中一些任务:
Approve-CMScript
Deny-CMScript
Get-CMScript
Invoke-CMScript
New-CMScript
Remove-CMScript
Set-CMScript
为Configuration Manager配置基于角色的管理
基于角色的管理基础知识