带有证书的Azure自动化中的身份验证错误 - Powershell代码

时间:2014-06-23 14:38:10

标签: powershell azure automation certificate

今天,我遇到了与Powershell和Azure Automation相关的其他问题。

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

所以,我在我的powershell控制台上开发了它,我没有遇到任何问题。当我试图"导入"我的自动化脚本。我写了#34; import"括号,因为我只是将我的代码复制到自动化控制台。

我想发布图片,但我不能,所以我会尽量清楚地解释我所做的步骤,确保我没有忘记某些事情。< / p>

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

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

首先是凭证一,我把我生成的另一个证书(.PFX)。

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

现在,在这些观点之后,我倾向于使用自动化中的代码段来操作我的Azure订阅,Azure中无法识别其中一些代码段,这就是我使用&#34; InlineScript&#34的原因;写下那些无法识别的内容。

这里的要点是,一旦我按照整个步骤准备和配置我的环境,以便在自动化中实现我想要的任何东西,我会得到一些与我的证书和东西相关的错误。

我要在这里粘贴我脚本的第一部分:

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 PM,错误:Get-AzureVMAvailableExtension:否   目前的订阅已被指定。使用Select-AzureSubscription    - 当前设置当前订阅。在测试2:19 char:19   +       + CategoryInfo:CloseError:(:) [Get-AzureVMAvailableExtension],Exception       + FullyQualifiedErrorId:Microsoft.WindowsAzure.Commands.ServiceManagement.IaaS.Extensions.GetAzureVMAvailableExtensionCommand   6/23/2014 2:20:56 PM,错误:New-AzureVMConfig:必须指定   MediaLocation或使用设置当前存储帐户   SET-AzureSubscription。在测试2: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与指定我的订阅的其他部分结合起来并尝试与此建立连接......(我的意思是,我写的最后一个代码)。

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

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

2 个答案:

答案 0 :(得分:0)

我认为问题在于你在inlinescript之外调用了Select-AzureSubscription。 Select-AzureSubscription设置会话变量以告知Azure cmdlet要连接的订阅,并且Runbook(PowerShell工作流)中的所有活动都在不同的会话中运行。解决方法是InlineScript,其中单个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
    }
}

答案 1 :(得分:0)

我有一个类似的问题,我得到的错误是:订阅“订阅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/