作为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。
答案 0 :(得分: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"
}
}
}
要将此内容放入资源组部署模板,您需要将xNetworking module复制到添加PowerShell DSC Extensions时创建的DSC文件夹下的项目中。然后将xNetworking文件夹添加到项目中,如下所示。
接下来,完成正常的部署过程。现在您有DSC扩展的不同之处在于,您需要在部署之前指定工件存储帐户。
项目中的 Deploy-AzureResourceGroup.ps1 脚本会将现在包含xNetworking模块的DSC.zip上传到存储帐户,以便Azure资源管理器(ARM)可以将扩展程序推送到存储帐户已配置虚拟机 之后。从那里,虚拟机中的DSC引擎接管并应用配置。
答案 1 :(得分:0)
请参阅此article
中的如何使用和发现DSC资源假设您将xFirewall模块作为DscResource的一部分删除,
首先你需要导入模块,我认为是xNetworking
,使用Import-Module {FullPath}
然后按Import-DSCResource -ModuleName xNetworking -name xFirewall
或尝试Import-DSCResource -Name xFirewall
,似乎这会让它扫描整个资源文件夹并为您找到xFirewall。