Как импортировать модули в Azure Automation Account с помощью PowerShell? - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь выяснить, как установить модули в учетную запись автоматизации Azure из галереи PowerShell, и я изо всех сил…

New-AzAutomationModule должен был это делать, но он постоянно дает статус «Неудачно» в списке модулей в Azure Автоматизация. Я использовал следующую команду:

$AzMods = Find-Module az.*
ForEach ($AzMod in $AZMods)
{
    New-AzAutomationModule -AutomationAccountName $AAccName -Name $AzMod.Name -ContentLinkUri "$($AZMod.RepositorySourceLocation)package/$($AzMod.Name)/$($AzMod.Version)" -ResourceGroupName $RGName -Verbose -ErrorAction Continue
    Sleep 5
}

Я также пробовал без версии версии URL, но это ничего не изменило. Кто-нибудь знает, как это сделать успешно? Несколько найденных мной постов, к сожалению, устарели и больше не актуальны.

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

Кажется, что MS уже некоторое время пинает PowerShell на обочину, но это сбивает меня с толку, что установка модулей из галереи даже не перечислены в разделе Get-Help

Ответы [ 3 ]

0 голосов
/ 26 марта 2020

Я могу воспроизвести вашу проблему, потому что большинство модулей имеют свои зависимости, если их зависимость не установлена, она не будет установлена.

Вы можете проверить их зависимости с помощью команды ниже.

$AzMods = Find-Module Az.*
ForEach ($AzMod in $AZMods)
{
    $AzMod.Dependencies.Name
}

Из приведенной выше команды вы можете найти зависимости Az.Accounts, Az.Profile, Az.Blueprint, а Az.Accounts также является зависимостью Az.Blueprint, поэтому, чтобы исправить проблему, мы могли бы сначала установите Az.Accounts, Az.Profile, затем установите Az.Blueprint, наконец, установите другие модули.

Вот пример, к которому вы можете обратиться, в моем примере я просто использую Sleep в вашей производственной среде вы также можете использовать некоторые суждения, проверьте, является ли ProvisioningState Succeeded через Get-AzAutomationModule, это зависит от ваших требований.

$AAccName = "<automation-account-name>"
$RGName = "<group-name>"

$deps1 = @("Az.Accounts","Az.Profile")
$deps2 = "Az.Blueprint"

foreach($dep in $deps1){
    $module = Find-Module -Name $dep
    $link = $module.RepositorySourceLocation + "/package/" + $module.Name + "/" + $module.Version
    New-AzAutomationModule -AutomationAccountName $AAccName -Name $module.Name -ContentLinkUri $link -ResourceGroupName $RGName
}

Sleep 300

$module = Find-Module -Name $deps2
$link = $module.RepositorySourceLocation + "/package/" + $module.Name + "/" + $module.Version
New-AzAutomationModule -AutomationAccountName $AAccName -Name $module.Name -ContentLinkUri $link -ResourceGroupName $RGName

Sleep 200

$AzMods = Find-Module -Name Az.*
ForEach ($AzMod in $AZMods){

    if($AzMod.Name -ne 'Az.Accounts' -and $AzMod.Name -ne 'Az.Profile' -and $AzMod.Name -ne 'Az.Blueprint'){
        $link = $AzMod.RepositorySourceLocation + "/package/" + $AzMod.Name + "/" + $AzMod.Version
        New-AzAutomationModule -AutomationAccountName $AAccName -Name $AzMod.Name -ContentLinkUri $link -ResourceGroupName $RGName
        Sleep 10
    }
}

Помимо , я замечаю, что модуль Az.DevOps.Blueprint все еще не работает, не знаю, почему, даже если я импортирую его в портал, он также не работает, возможно, относится к самому модулю.

0 голосов
/ 06 мая 2020

Я не уверен, что это все еще актуально. Я была такая же проблема. Azure Автоматизация не развертывает зависимости.

Я создал скрипт, обрабатывающий эту часть для вас https://github.com/y0rik/pwsh-azure

Надеюсь, это поможет

0 голосов
/ 26 марта 2020

Согласно документам для модуля, ваше имя $ AzMod.Name соответствует разрешенному типу файла.

New-AzAutomationModule

Пример 1. Импорт модуля

Windows PowerShell , который имеет расширение имени файла .psm1 или .dll

Windows Манифест модуля PowerShell , который имеет расширение имени файла .psd1. Имя файла .zip, имя папки и имя файла в папке должны совпадать. Укажите файл .zip в виде URL-адреса, к которому может обращаться служба автоматизации. Если вы импортируете модуль Windows PowerShell в Automation с помощью этого командлета или командлета Set-AzAutomationModule, операция будет асинхронной. Команда завершает ли импорт успешно или неудачно. Чтобы проверить, успешно ли это выполнено, выполните следующую команду: PS C: \> $ ModuleInstance = Get-AzAutomationModule -NameModuleName Проверьте свойство ProvisioningState на значение Succeeded.

...