Azure PowerShell DSC устанавливает дополнительные модули

В рамках шаблона группы ресурсов Azure у меня есть настройка расширения PowerShell DSC для моей виртуальной машины, которая предоставляет различные функции Windows.

В рамках этой автоматической настройки я хочу иметь возможность открывать некоторые порты в брандмауэре, после небольшого исследования я обнаружил, что доступен модуль xFirewall DSC. Моя проблема в том, как я могу автоматически установить этот модуль на виртуальную машину Azure до выполнения DSC?

Моя конфигурация выглядит так:

Configuration Main
{

Param ( [string] $nodeName )

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

Node $nodeName

Импорт xFirewall не выполняется, потому что модуль не установлен.

Я думал о создании еще одного сценария DSC, который можно было бы запустить раньше, чем этот, но это оказалось трудным, поскольку вы можете иметь только одно расширение DSC, подключенное к виртуальной машине за раз.


person Mike Norgate    schedule 18.05.2016    source источник
comment
Вы используете Visual Studio для создания / редактирования шаблона?   -  person Rick Rainey    schedule 18.05.2016
comment
1. xNetworking - это имя модуля, содержащего xFirewall. 2. Используете ли вы Publish-AzureVMDscConfiguration для создания Zip-файла с расширением? Если да, то модуль должен быть включен в zip-архив.   -  person TravisEz13    schedule 18.05.2016


Ответы (2)


Модуль, который вам нужно импортировать, - это модуль 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 в свой проект под Папка DSC, созданная при добавлении расширений PowerShell DSC. Затем добавьте папку xNetworking в свой проект, как показано здесь.

введите описание изображения здесь

Затем пройдите обычный процесс развертывания. Теперь, когда у вас есть расширение DSC, будет отличаться то, что вам нужно будет указать учетную запись хранения артефактов перед развертыванием.

введите описание изображения здесь

Сценарий Deploy-AzureResourceGroup.ps1 в вашем проекте загрузит файл DSC.zip, который теперь включает ваш модуль xNetworking, в учетную запись хранения, чтобы диспетчер ресурсов Azure (ARM) мог затем отправить расширение на виртуальную машину. после его инициализации. Оттуда механизм DSC на виртуальной машине берет на себя и применяет конфигурацию.

person Rick Rainey    schedule 18.05.2016
comment
Привет, @Rick Rainey, пожалуйста, при выполнении этого модули не копируются ни в выходной каталог, ни в хранилище Azure. Нужен ли какой-то дополнительный шаг? - person marek_lani; 06.10.2017
comment
За последний год в сценарий PowerShell были внесены изменения, которые теперь требуют установки модулей на локальном компьютере. Таким образом, вам нужно будет либо изменить сценарий, чтобы вручную упаковать модули в ваш проект (так, как он работал - что, на мой взгляд, предпочтительнее), либо просто установить модули в свой ящик разработчика. Посмотрите на сценарий PowerShell, и вы поймете, о чем я говорю. - person Rick Rainey; 06.10.2017

См. Как использовать и обнаруживать ресурсы DSC в этом статья

Предполагая, что вы сбросили модуль xFirewall как часть DscResource, сначала вам нужно импортировать модуль, я думаю, что xNetworking, используя Import-Module {FullPath}, затем следуйте Import-DSCResource -ModuleName xNetworking -name xFirewall

Или попробуйте Import-DSCResource -Name xFirewall, кажется, это заставит его просканировать всю папку ресурсов и найти для вас xFirewall.

person Kai Zhao    schedule 18.05.2016