Azure PowerShell DSC 安装额外模块

Mik*_*ate 5 powershell azure azure-powershell dsc

作为 Azure 资源组模板的一部分,我为我的 VM 设置了 PowerShell DSC 扩展,该扩展设置了各种 Windows 功能。

作为此自动化设置的一部分,我希望能够在防火墙中打开一些端口,经过一番研究后我发现有一个可用的 xFirewall DSC 模块。我的问题是如何在 DSC 执行之前自动将此模块安装到 Azure VM 上?

我的配置如下:

Configuration Main
{

Param ( [string] $nodeName )

Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xFirewall

Node $nodeName
Run Code Online (Sandbox Code Playgroud)

由于未安装模块,xFirewall 导入失败。

我曾考虑过创建另一个可以在此脚本之前运行的 DSC 脚本,但这证明很困难,因为一次只能将一个 DSC 扩展附加到虚拟机。

Ric*_*ney 4

您需要导入的模块是xNetworking模块,资源是xFirewall。因此,DSC 脚本的一个简单示例如下所示。

Configuration Main
{

Param ( [string] $nodeName )

Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xNetworking

Node $nodeName
  {
      xFirewall Firewall 
      { 
          Name    = "AllowNotepad"             
          Program = "c:\windows\system32\notepad.exe" 
          Action  = "Allow" 
      } 
  }
}
Run Code Online (Sandbox Code Playgroud)

要将其添加到资源组部署模板中,您需要将xNetworking 模块复制到项目中添加 PowerShell DSC 扩展时创建的 DSC 文件夹下。然后将 xNetworking 文件夹添加到您的项目中,如下所示。

在此输入图像描述

接下来,完成正常的部署过程。现在您有了 DSC 扩展,不同之处在于您需要在部署之前指定一个工件存储帐户。

在此输入图像描述

项目中的Deploy -AzureResourceGroup.ps1脚本会将 DSC.zip(现在包含 xNetworking 模块)上传到存储帐户中,以便 Azure 资源管理器 (ARM) 可以在预配扩展后将扩展推送到虚拟机中。从那里,虚拟机中的 DSC 引擎接管并应用配置。