#powershell #azure #automation #certificate
#powershell #azure #автоматизация #сертификат
Вопрос:
Сегодня я столкнулся с другой проблемой, связанной с Powershell и Azure Automation.
Давайте посмотрим… Я намерен создать автоматическое развертывание, которое deploy выполняет сбор и сохранение данных из и в мои большие двоичные объекты, и после всех этих процессов удалите это развертывание.
Итак, я разработал это на своей консоли powershell, и у меня не было проблем. Дело доходит до того, что я пытаюсь «импортировать» свой скрипт в автоматизацию. Я пишу «импорт» в скобках, потому что я только что скопировал свой код в консоль автоматизации.
Я хотел бы опубликовать изображения, но не могу, поэтому я постараюсь четко объяснить шаги, которые я сделал, убедившись, что я ничего не забыл.
Прежде всего, я создал свои сертификаты, один с расширением .cer, а другой с расширением .pfx, ок.
Как только я загрузил первый сертификат в разделе «Управление сертификатами» (в меню настроек) Я создал ресурсы:
Сначала учетная запись, куда я помещаю другой сертификат, который я сгенерировал (.PFX).
После этого я создал последний ресурс, подключенный, где я написал имя сертификата там, где это было необходимо, а также идентификатор подписки.
Теперь, после этих пунктов, мне предлагается работать с моей подпиской Azure, используя фрагменты в автоматизации, некоторые из этих фрагментов не распознаются 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
}
}
Ошибка, которую я получаю при тестировании этого скрипта, является следующей:
23.06.2014 2:20:56 вечера, ошибка: Get-AzureVMAvailableExtension : текущая подписка не была назначена. Используйте Select-AzureSubscription -Current, чтобы установить текущую подписку. При тестировании 2:19 char:19 CategoryInfo : CloseError: (:) [Get-AzureVMAvailableExtension], исключение FullyQualifiedErrorId: Microsoft.WindowsAzure.Команды.ServiceManagement.IaaS.Расширения.GetAzureVMAvailableExtensionCommand 23.06.2014 2:20:56 ВЕЧЕРА, Ошибка: New-AzureVMConfig : необходимо указать среднее местоположение или установить текущую учетную запись хранения с помощью Set-AzureSubscription. При тестировании2:19 символ:19
Как мы можем видеть, в этих ошибках мы заметили, что есть некоторые проблемы с подпиской.
Вместо этого используйте:
# Specify Azure Subscription Name
$subName = 'AzureConnection'
# Connect to Azure Subscription
Connect-Azure `
-AzureConnectionName $subName
Select-AzureSubscription `
-SubscriptionName $subName
Я попытался с помощью set-azuresubscription… но у меня была похожая проблема. Я не знаю, следует ли мне комбинировать set-azuresubscription и другую часть, указывающую мою подписку, и пытаться установить с ней соединение… (Я имею в виду последний код, который я написал).
Итак… Как я могу это исправить?
Заранее спасибо, надеюсь, что я выразился ясно.
Ответ №1:
Я думаю, проблема в том, что вы вызываете Select-AzureSubscription вне inlinescript. Select-AzureSubscription задает переменную сеанса, чтобы указывать командлетам Azure, к какой подписке подключаться, и все действия в runbook (рабочий процесс PowerShell) выполняются в разных сеансах. Обходным решением является InlineScript, где все в одном inlinescript выполняется в одном сеансе в контексте PowerShell. Таким образом, включение вызова Select-AzureSubscription должно поместить его в правильный сеанс.
Также появляется командлет Get-AzureVMAvailableExtension, который, в частности, взаимодействует с хранилищем Azure и поэтому требует, чтобы вы установили учетную запись хранилища Azure в файле данных подписки. Connect-Azure в настоящее время не делает этого за вас.
Вот runbook, я думаю, будет работать:
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:
У меня была аналогичная проблема, когда я получил ошибку: подписка «Subscription A» не существует, хотя я определил ее в том же скрипте.
Однако это не сработало, поэтому я создал сертификат и загрузил его как «ресурс» в книге автоматизации на верхней правой вкладке. Затем добавлен этот код для ссылки на assetname (сертификат) Я определил ранее. Я также создал «строковые» значения для идентификатора подписки и имени подписки.
Итак, мой сценарий автоматизации выглядит примерно так, чтобы выбрать подписку:
$subscriptionName = Get-AutomationVariable -Name «SubscriptionName»
$subscriptionID = Get-AutomationVariable -Name «SubscriptionID»
$certificateName = Get-AutomationCertificate -Имя «CertificateName»
$storageaccount = Get-AutomationVariable -Name «StorageAccount»
Set-AzureSubscription -SubscriptionName $subscriptionName -SubscriptionId $subscriptionID -Сертификат $certificateName Выберите -AzureSubscription $subscriptionName
Удачи, надеюсь, это поможет или укажет вам правильное направление.
Вот ссылка, которую я нашел весьма полезной: http://devinknightsql.com/2014/06/18/setting-up-automation-in-azure /