我们正在尝试将自动化帐户从服务主体更改为系统管理身份。在我们将power shell脚本更改为使用系统管理的身份后,它要求升级Az模块,我们升级了它。在此之后,我们得到模块冲突错误。有谁知道如何解决这个模块冲突问题吗?我如何从自动化帐户完全卸载AzureRM模块,因为我们不使用此模块。(我尝试删除AzureRM模块,但默认模块无法从自动化帐户中删除)
服务主体编码:
try {
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
$null = Connect-AzAccount -ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
Write-Output "Authenticated with Service principal."
}
catch {
Write-Error -Message $_.Exception
throw $_.Exception
}
try {
$smtpPasswordString = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $smtpPasswordSecretName -AsPlainText -ErrorAction Stop
Write-Output "Success retrieving source KeyVault Secrets"
}
catch {
Write-Error -Message $_.Exception
Write-Output "Error retrieving source KeyVault Secrets"
}
系统管理标识码:
注意:我成功地通过了身份验证,但当它检索密钥时,它给予我模块冲突错误。我用最新版本升级了所有AZ和AzureRM模块。
try {
$null = Connect-AzAccount -Identity
Write-Output "Authenticated with System Identity."
}
catch {
Write-Error -Message $_.Exception
throw $_.Exception
}
try {
$smtpPasswordString = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $smtpPasswordSecretName -AsPlainText -ErrorAction Stop
Write-Output "Success retrieving source KeyVault Secrets"
}
catch {
Write-Error -Message $_.Exception
Write-Output "Error retrieving source KeyVault Secrets"
}
返回错误:
此错误是由于将较旧的AzureRM和较新的Az模块加载到同一PS会话时发生模块冲突-这两个模块不兼容。如果您在Azure沙箱中执行脚本,请确保没有Runbook同时调用同一PSSession中的Az和AzureRM模块或在同一脚本或Runbook中使用。要解决此问题,请创建两个不同的自动化帐户并将Az和Rm模块分别导入到其中,或者在不同的时间使用Az和AzureRm模块安排Runbook,以避免同一PSSession中的模块。如果您正在Hybrid worker上执行脚本,请卸载Az/AzureRM模块并尝试再次运行脚本。使用“Uninstall-AzModule”函数删除所有Az模块,如下所述:https://docs.microsoft.com/en-us/powershell/azure/uninstall-az-ps?view=azps-4.6.1#uninstall-the-az-powershell-module-from-powershellget或使用“Uninstall-AzureRm”cmdlet删除所有AzureRm模块,如下所述:https://docs.microsoft.com/en-us/powershell/azure/uninstall-az-ps?view=azps-4.3.0#uninstall-the-azurerm-module内部错误:System.TypeLoadException:程序集“Microsoft.Azure.PowerShell.Clients.ResourceManager,Version=1.0.0.0,Culture=neutral,PublicKeyToken= 31 bf 3856 ad 364 e35”中的类型“Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient”中的方法“get_SerializationSettings”没有实现。在Microsoft.Azure.Commands.ResourceManager.Common.AzureRMCmdlet.BeginProcessing()在System.Management.Automation.Cmdlet.DoBeginProcessing()在System.Management.Automation.CommandProcessorBase.DoBegin()+ CategoryInfo:未指定:(:)[Write-Error],WriteErrorException + FullyQualifiedErrorId:Microsoft.PowerShell.Commands.WriteErrorException
1条答案
按热度按时间vulvrdjw1#
get_Serialization设置出错:
此错误可能是由于在Runbook中使用了从AzureRM到Az模块的不完整迁移而导致的。
要解决这个问题,您需要将其迁移到AZ模块。进入Azure自动化,通过进入自动化帐户中共享资源下的模块来删除Azure RM模块是不可行的,并且删除选项呈灰色。
这样做的原因是,您只能卸载由贡献者或管理员安装/导入的模块,而不是默认的全局模块。
有关迁移程序的详细信息,请参阅MS Doc。
首先,如果你想卸载
Azure RM
,你需要使用PowerShell 5.1
版本。因为Azure RM不支持PowerShell核心7.1
及以上版本。要在Azure Runbook中使用
uninstall-AzureRM
,您需要在管理员模式下连接Azure帐户。为此,请确保为
Automation account
启用了system identity
,并在identity -> system identity(on) -> Azure role assignments
下添加必要的权限。一旦完成,尝试运行下面的脚本,它为我工作。
为了验证是否正确卸载了
Azure RM
,我使用Get-Module
命令检索Azure RM列表,但除了Az模块之外,什么都没有打印出来。或者,如果PS会话中存在冲突,请尝试使用
Import-Module -Name AZ.*
并执行脚本。通过这种方式,您还可以删除特定会话的冲突。有关信息,请参阅github issues。