【问题标题】:Authentication error in Azure Automation with certificates - Powershell code带有证书的 Azure 自动化中的身份验证错误 - Powershell 代码
【发布时间】:2014-08-13 15:46:59
【问题描述】:

今天我遇到了另一个与 Powershell 和 Azure 自动化相关的问题。

让我们看看...我的意图是构建一个自动部署,该部署会从我的 blob 中挑选和保存数据,在所有这些过程之后,删除该部署。

所以,我在我的 powershell 控制台上开发了它,我没有遇到任何问题。当我尝试将我的脚本“导入”到自动化时,重点就来了。我用括号写了“import”,因为我刚刚将我的代码复制到了自动化控制台。

我想发布图片,但我不能,所以我会尽量清楚地解释我所做的步骤,确保我没有忘记一些东西。

首先,我创建了我的证书,一个带有 .cer 扩展名,另一个带有 .pfx,好的。

在管理证书部分(在设置菜单中)上传第一个证书后,我创建了资产:

首先是凭据,我将生成的另一个证书 (.PFX) 放在其中。

之后,我创建了最后一个资产,即连接资产,我在需要的地方写下了证书名称以及订阅 ID。

现在,在这些点之后,我应该在自动化中使用 sn-ps 操作我的 Azure 订阅,其中一些 sn-ps 无法被 Azure 识别,这就是为什么我使用“InlineScript”来写下这些无法识别。

这里的重点是,一旦我按照整个步骤准备和配置我的环境以使我想要的自动化成为可能,我会收到一些与我的证书和东西相关的错误。

我将在此处粘贴脚本的第一部分:

workflow testing2

{

# Specify Azure Subscription Name
$subName = 'AzureConnection'

# Connect to Azure Subscription
Connect-Azure `
    -AzureConnectionName $subName

Select-AzureSubscription `
    -SubscriptionName $subName 

inlineScript{

    # VM related variables

    $pwd = "xxxxxxxxx"
    $aun = "LrootA"
    $VMimage = "a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201405.01-en.us-127GB.vhd"

    # CSExtension Version

    $CSEVersion = Get-AzureVMAvailableExtension | Where { $_.ExtensionName -like "*Custom*" } | Select Version

}

}

我在测试这个脚本时遇到的错误是下一个:

2014 年 6 月 23 日下午 2:20:56,错误:Get-AzureVMAvailableExtension:否 当前订阅已被指定。使用 Select-AzureSubscription -Current 设置当前订阅。在测试2:19 char:19 + + CategoryInfo : CloseError: (:) [Get-AzureVMAvailableExtension],异常 +fullyQualifiedErrorId:Microsoft.WindowsAzure.Commands.ServiceManagement.IaaS.Extensions.GetAzureVMAvailableExtensionCommand 2014 年 6 月 23 日下午 2:20:56,错误:New-AzureVMConfig:必须指定 MediaLocation 或使用设置当前存储帐户 设置 AzureSubscription。在 testing2:19 char:19

如我们所见,在这些错误中,我们注意到订阅存在一些问题。

改为使用:

# Specify Azure Subscription Name
$subName = 'AzureConnection'

# Connect to Azure Subscription
Connect-Azure `
    -AzureConnectionName $subName

Select-AzureSubscription `
    -SubscriptionName $subName 

我尝试使用 set-azuresubscription...但我遇到了类似的问题。我不知道我是否应该将 set-azuresubscription 和指定我的订阅的另一部分结合起来并尝试与此建立连接......(我的意思是,我写的最后一个代码)。

那么...我该如何解决这个问题?

提前谢谢,希望我已经清楚了。

【问题讨论】:

    标签: powershell azure automation certificate


    【解决方案1】:

    我认为问题在于您在内联脚本之外调用 Select-AzureSubscription。 Select-AzureSubscription 设置一个会话变量来告诉 Azure cmdlet 要连接到哪个订阅,并且 Runbook(PowerShell 工作流)中的所有活动都在不同的会话中运行。解决方法是 InlineScript,其中单个内联脚本中的所有内容都在 PowerShell 上下文中的同一会话中运行。所以把 Select-AzureSubscription 调用放在那里应该把它放在正确的会话中。

    还出现了 Get-AzureVMAvailableExtension cmdlet,具体而言,它与 Azure 存储交互,因此需要您在订阅数据文件中设置 Azure 存储帐户。 Connect-Azure 目前不为您执行此操作。

    这是我认为可行的操作手册:

    workflow testing2
    {
    
        # Specify Azure Subscription Name
        $subName = 'AzureConnection'
    
        # Specify the Azure Storage Account to use
        $StorageAccountName = 'MyStorageAccount'
    
        # Connect to Azure Subscription
        Connect-Azure `
            -AzureConnectionName $subName
    
        InlineScript {
    
            Select-AzureSubscription `
                -SubscriptionName $Using:subName
    
            Set-AzureSubscription ` 
                -SubscriptionName $Using:subName ` 
                -CurrentStorageAccount $Using:StorageAccountName 
    
            # VM related variables
    
            $pwd = "xxxxxxxxx"
            $aun = "LrootA"
            $VMimage = "a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201405.01-en.us-127GB.vhd"
    
            # CSExtension Version
            $CSEVersion = Get-AzureVMAvailableExtension | Where { $_.ExtensionName -like "*Custom*" } | Select Version
        }
    }
    

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,我得到的错误是:订阅“订阅 A”不存在,即使我在同一个脚本中定义了它。

      但是这不起作用,所以我创建了一个证书并将其作为“资产”上传到右上角选项卡的自动化手册中。然后添加此代码以引用我之前定义的资产名称(证书)。我还为订阅 ID 和订阅名称创建了“字符串”值。

      所以我的自动化脚本看起来像这样来选择订阅:

      $subscriptionName = Get-AutomationVariable -Name "SubscriptionName"

      $subscriptionID = Get-AutomationVariable -Name "SubscriptionID"

      $certificateName = Get-AutomationCertificate -Name "CertificateName"

      $storageaccount = Get-AutomationVariable -Name "StorageAccount"

      Set-AzureSubscription -SubscriptionName $subscriptionName -SubscriptionId $subscriptionID -Certificate $certificateName 选择-AzureSubscription $subscriptionName

      祝你好运,希望这能帮助你或为你指明正确的方向。

      这是一个我觉得非常有用的链接:http://devinknightsql.com/2014/06/18/setting-up-automation-in-azure/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        • 2022-07-01
        • 1970-01-01
        • 2018-02-13
        • 2016-12-13
        相关资源
        最近更新 更多