如何使用 PowerShell 将模块导入 Azure 自动化帐户?
How to import modules into Azure Automation Account using PowerShell?
我正在尝试弄清楚如何从 PowerShell 库中将模块安装到 Azure 自动化帐户中,我正在努力......
New-AzAutomationModule 应该能够做到这一点,但它在 Azure Automation 的模块列表中不断显示“失败”状态。
我使用的命令是这样的:
$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 Automation 来完成,所以我知道它可以完成,但必须手动执行此操作几乎不是最佳选择。
似乎 MS 已经将 PowerShell 踢到路边有一段时间了,但让我感到困惑的是,从库中安装模块甚至没有列在“获取帮助”部分
根据该模块的文档,您的名字 $AzMod.Name 是否解析为预期的文件类型。
Example 1: Import a module
Windows PowerShell module, which has a .psm1 or .dll file name extension
Windows PowerShell module manifest, which has a .psd1 file
name extension The name of the .zip file, the name of the folder, and
the name of the file in the folder must be the same. Specify the .zip
file as a URL that the Automation service can access. If you import a
Windows PowerShell module into Automation by using this cmdlet or the
Set-AzAutomationModule cmdlet, the operation is asynchronous. The
command finishes whether the import succeeds or fails. To check
whether it succeeded, run the following command: PS C:\>
$ModuleInstance = Get-AzAutomationModule -NameModuleName Check the
ProvisioningState property for a value of Succeeded.
我可以重现你的问题,因为大多数模块都有它们的依赖,如果没有安装它的依赖,它会失败。
您可以通过以下命令检查它们的依赖关系。
$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
模块仍然失败,不知道为什么,即使我在门户中导入它,它也失败了,可能与模块本身。
我正在尝试弄清楚如何从 PowerShell 库中将模块安装到 Azure 自动化帐户中,我正在努力......
New-AzAutomationModule 应该能够做到这一点,但它在 Azure Automation 的模块列表中不断显示“失败”状态。 我使用的命令是这样的:
$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 Automation 来完成,所以我知道它可以完成,但必须手动执行此操作几乎不是最佳选择。
似乎 MS 已经将 PowerShell 踢到路边有一段时间了,但让我感到困惑的是,从库中安装模块甚至没有列在“获取帮助”部分
根据该模块的文档,您的名字 $AzMod.Name 是否解析为预期的文件类型。
Example 1: Import a module
Windows PowerShell module, which has a .psm1 or .dll file name extension
Windows PowerShell module manifest, which has a .psd1 file name extension The name of the .zip file, the name of the folder, and the name of the file in the folder must be the same. Specify the .zip file as a URL that the Automation service can access. If you import a Windows PowerShell module into Automation by using this cmdlet or the Set-AzAutomationModule cmdlet, the operation is asynchronous. The command finishes whether the import succeeds or fails. To check whether it succeeded, run the following command: PS C:\> $ModuleInstance = Get-AzAutomationModule -NameModuleName Check the ProvisioningState property for a value of Succeeded.
我可以重现你的问题,因为大多数模块都有它们的依赖,如果没有安装它的依赖,它会失败。
您可以通过以下命令检查它们的依赖关系。
$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
模块仍然失败,不知道为什么,即使我在门户中导入它,它也失败了,可能与模块本身。