Azure PowerShell DSC 安装额外模块

Azure PowerShell DSC install extra modules

作为 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

xFirewall导入失败,因为没有安装模块

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

参考如何使用和发现 DSC 资源 article

假设您将 xFirewall 模块作为 DscResource 的一部分删除, 首先你需要导入模块,我认为是 xNetworking,通过使用 Import-Module {FullPath} 然后是 Import-DSCResource -ModuleName xNetworking -name xFirewall

或尝试 Import-DSCResource -Name xFirewall,这似乎会让它扫描整个资源文件夹并为您找到 xFirewall。

您需要导入的模块是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" 
      } 
  }
}

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

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

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