你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何创建自定义计算机配置包项目
在开始之前,最好先阅读计算机配置的概述页面。
审核/配置 Windows 和 Linux 时,计算机配置使用 Desired State Configuration (DSC)。 DSC 配置定义了计算机应处于的条件。
重要
审核环境状态并应用配置的自定义包已处于正式发布(GA)支持状态。 但以下限制将适用:
若要使用应用配置的计算机配置包,需要 Azure VM 来宾配置扩展版本 1.26.24 或更高版本,或者 Arc 代理 1.10.0 或更高版本。
GuestConfiguration 模块仅在 Ubuntu 18 及更高版本上可用。 但是,该模块生成的包和策略可以在 Azure 或 Arc 中支持的任何 Linux 发行版和版本上使用。
macOS 上的测试包不可用。
不要在自定义内容包中使用机密或保密信息。
请使用以下步骤来创建自己的配置,用于管理 Azure 或非 Azure 计算机的状态。
安装 PowerShell 7 和所需的 PowerShell 模块
首先,按照如何设置计算机配置创作环境中的步骤进行操作。 这些步骤可帮助你安装 OS 所需的 PowerShell 版本、GuestConfiguration 模块和 PSDesiredStateConfiguration 模块。
创作配置
创建配置包之前,请创作和编译 DSC 配置。 可以使用针对 Windows 和 Linux 提供的示例配置。
重要
编译 Windows 的配置时,请使用 PSDesiredStateConfiguration 版本 2.0.7(稳定版本)。 在为 Linux 编译配置时,请安装预发布版本 3.0.0。
此示例配置适用于 Windows 计算机。 它将计算机配置为在 Process
和 Machine
范围内创建 MC_ENV_EXAMPLE
环境变量。 变量值设置为 'This was set by machine configuration'
。
Configuration MyConfig {
Import-DscResource -Name 'Environment' -ModuleName 'PSDscResources'
Environment MachineConfigurationExample {
Name = 'MC_ENV_EXAMPLE'
Value = 'This was set by machine configuration'
Ensure = 'Present'
Target = @('Process', 'Machine')
}
}
MyConfig
在 MyConfig.ps1
脚本文件中保存该定义后,可以运行脚本来编译配置。
. .\MyConfig.ps1
Directory: C:\dsc\MyConfig
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 5/16/2023 10:39 AM 1080 localhost.mof
配置将编译到当前工作目录的 MyConfig
文件夹中的 localhost.mof
文件中。 将 localhost.mof
重命名为要用作包名称的名称,例如 MyConfig.mof
。
Rename-Item -Path .\MyConfig\localhost.mof -NewName MyConfig.mof -PassThru
Directory: C:\dsc\MyConfig
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 5/16/2023 10:40 AM 1080 MyConfig.mof
注意
此示例演示如何为 Windows 计算机创作和编译配置。 对于 Linux,需要使用 PowerShell 类来创建自定义 DSC 资源模块。 使用 PowerShell 类编写自定义 DSC 资源一文中提供了自定义资源和配置(已使用计算机配置进行了测试)的完整示例。
本文的其余部分适用于为 Linux 和 Windows 计算机定义的配置,除非有提到特定于平台的注意事项。
创建配置包项目
编译 MOF 后,支持文件必须打包在一起。 计算机配置使用已完成的包来创建 Azure Policy 定义。
New-GuestConfigurationPackage
cmdlet 创建包。 配置所需的模块必须在开发环境的 $Env:PSModulePath
中提供,以便模块中的命令可以将它们添加到包中。
创建 Windows 内容时 New-GuestConfigurationPackage
cmdlet 的参数:
- 名称:计算机配置包名称。
- 配置:已编译 DSC 配置文档完整路径。
- 路径:输出文件夹路径。 此参数是可选的。 如果未指定,则在当前目录中创建包。
- 类型:(
Audit
、AuditandSet
)确定配置是应当只审核,还是配置在计算机状态不是所需状态时更改其状态。 默认为Audit
。
此步骤不需要提升特权。 如果多次运行该命令,则可以使用 Force 参数覆盖现有包。
以下命令创建包项目:
# Create a package that will only audit compliance
$params = @{
Name = 'MyConfig'
Configuration = './MyConfig/MyConfig.mof'
Type = 'Audit'
Force = $true
}
New-GuestConfigurationPackage @params
# Create a package that will audit and apply the configuration (Set)
$params = @{
Name = 'MyConfig'
Configuration = './MyConfig/MyConfig.mof'
Type = 'AuditAndSet'
Force = $true
}
New-GuestConfigurationPackage @params
将返回一个对象,其中包含已创建的包的名称和路径。
Name Path
---- ----
MyConfig C:\dsc\MyConfig.zip
计算机配置项目的预期内容
计算机配置使用已完成的包来创建 Azure Policy 定义。 包中包含:
- 作为 MOF 的已编译 DSC 配置
- 模块文件夹
- GuestConfiguration 模块
- DscNativeResources 模块
- MOF 所需的 DSC 资源模块
- 一个元配置文件,存储包
type
和version
PowerShell cmdlet 可创建包 .zip
文件。 不需要根级别文件夹或版本文件夹。 包格式必须是 .zip
文件,未压缩时总大小不能超过 100 MB。
可以使用 Expand-Archive
cmdlet 解压存档以进行检查。
Expand-Archive -Path .\MyConfig.zip -DestinationPath MyConfigZip
可以使用 PowerShell 获取未压缩包的总大小。
Get-ChildItem -Recurse -Path .\MyConfigZip |
Measure-Object -Sum Length |
ForEach-Object -Process {
$Size = [math]::Round(($_.Sum / 1MB), 2)
"$Size MB"
}
使用第三方工具扩展计算机配置
可以扩展计算机配置的项目包以包含第三方工具。 扩展计算机配置要求开发两个组件。
- 处理与管理第三方工具相关的所有活动的 Desired State Configuration 资源
- 安装
- Invoke
- 转换输出
- 供工具以本机方式使用的格式正确的内容
如果社区解决方案尚不存在,则 DSC 资源需要自定义开发。 可以通过在 PowerShell 库中搜索标记 GuestConfiguration 来发现社区解决方案。
注意
计算机配置扩展性是“自带许可”方案。 使用之前,请确保已满足任何第三方工具的条款和条件。
在开发环境中安装 DSC 资源之后,使用 New-GuestConfigurationPackage
的 FilesToInclude 参数在内容项目中包含第三方平台的内容。