今天,我遇到了与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与指定我的订阅的其他部分结合起来并尝试与此建立连接......(我的意思是,我写的最后一个代码)。
那么......我该如何解决这个问题?
提前致谢,希望我已经清楚了。
答案 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/