适用于 PowerShell 7 的 Azure Automation Hybrid-Worker Get-AutomationPSCredential

Azure Automation Hybrid-Worker Get-AutomationPSCredential for PowerShell 7

我们正在将一些 Azure 自动化混合辅助角色脚本移至 PowerShell 7.1。为此,PowerShell 5.1 中可用的命令之一是:[PSCredential] $AutomationCredential = Get-AutomationPSCredential -Name 'abcdef'。当我们在 PowerShell 7.1 中尝试相同的命令时,出现错误 The 'Get-AutomationPSCredential' command was found in the module 'Orchestrator.AssetManagement.Cmdlets', but the module could not be loaded. For more information, run 'Import-Module Orchestrator.AssetManagement.Cmdlets'

我们已将导入模块添加到代码中,但我们得到 Could not load file or assembly 'JobRuntimeData.Client, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified

我们确实在沙盒区域中找到了 Orchestrator.AssetManagement.Cmdlets 混合工作者。我们知道这个模块是在安装 hybrid-worker 时加载的 (https://docs.microsoft.com/en-us/azure/automation/shared-resources/modules#internal-cmdlets).

基于Microsoft official document

'Get-AutomationPSCredential 目前支持到 Azure powershell 6.6.0

注意:Powershell 7.1 仍在预览中,所以这可能是错误的原因。

请参阅此 MS DOC 了解更多信息。

我们假设 Orchestrator.AssetManagement.Cmdlets 在这一点上被窃听,但没有发现任何证据表明它是。为了解决这个问题,我们打算使用 runbook 变量来存储密码,但它需要 cmdlet 来实际解码 secret/hidden 值。

最后,我们使用了密钥库来存储密码。以下是用作解决方法的方法。

$User = "AutomationUser"
$KeyVaultName = "KeyVault"
try {
    $Password = (ConvertTo-SecureString (Get-AzKeyVaultSecret -VaultName $KeyVaultName -Name $User -AsPlainText) -AsPlainText -Force)
    [PSCredential] $AutomationCredential = New-Object System.Management.Automation.PSCredential($User, $Password)
}
catch {
    $ErrorMessage = "Unable to retrieve credentials for user: [${$User}].  $_"
    throw $ErrorMessage
    BREAK
}