#azure #powershell #azure-functions #azure-runbook
#azure #powershell #azure-функции #azure-runbook
Вопрос:
Я пишу скрипт powershell, который будет выполняться в runbook. Этот сценарий сначала отключит функциональные приложения в группе ресурсов, затем другой аналогичный сценарий включит функциональные приложения в группе ресурсов.
Я уже пробовал приведенный ниже сценарий, но он не включает функциональные приложения
$connectionName = "AzureRunAsConnection"
try {
# Get the connection "AzureRunAsConnection "
$servicePrincipalConnection=Get-AutomationConnection -Name $connectionName
"Logging in to Azure..."
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint } catch {
if (!$servicePrincipalConnection)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}
$RGName = Get-AutomationVariable -Name 'DRPrimaryResourceGroupName'
$FAppResources = Get-AzureRmResource -ResourceType "Microsoft.Web/sites" -ResourceGroupName $RGName -ExpandProperties
$LAppResources = Get-AzureRmResource -ResourceType "Microsoft.Logic/workflows" -ResourceGroupName $RGName -ExpandProperties
ForEach ($FAResource in $FAppResources) {
Write-Output ("*****************************************************************************************")
Write-Output ("Starting FunctionApp " $FAResource.ResourceName " in Resource Group " $RGName)
Write-Output ("*****************************************************************************************")
Start-AzureRmWebApp -ResourceGroupName $RGName -Name $FAResource.ResourceName
Write-Output ($FAResource.ResourceName " and its status is " $FAResource.Properties.State)
}
ForEach ($LAResource in $LAppResources) {
Write-Output ("*****************************************************************************************")
Write-Output ("Enabling Logic App " $LAResource.ResourceName " in Resource Group" $RGName)
Write-Output ("***************************************************************************************")
Set-AzureRmLogicApp -ResourceGroupName $RGName -Name $LAResource.ResourceName -State Enabled -Force
Write-Output ($LAResource.ResourceName " and its status is " $LAResource.Properties.State)
}
Комментарии:
1. Есть ли сообщение об ошибке?
2. Какие-либо обновления по этой проблеме? Если это полезно, пожалуйста, примите это как ответ, спасибо.
Ответ №1:
Я полагаю, вы видели результат вашего runbook, он выглядел как на скриншоте ниже. Итак, вы думаете, что ваш скрипт не включает функциональное приложение.
На самом деле, ваш скрипт включает функциональное приложение, но строка Write-Output ($FAResource.ResourceName " and its status is " $FAResource.Properties.State)
может просто записать старое состояние.
Чтобы устранить проблему, вы могли бы попробовать добавить строку $newstate = (Get-AzureRmWebApp -ResourceGroupName $RGName -Name $FAResource.ResourceName).State
, она получает новое состояние после запуска функционального приложения, выпишите $newstate
, тогда все будет работать нормально.
Завершить сценарий:
ForEach ($FAResource in $FAppResources) {
Write-Output ("*****************************************************************************************")
Write-Output ("Starting FunctionApp " $FAResource.ResourceName " in Resource Group " $RGName)
Write-Output ("*****************************************************************************************")
Start-AzureRmWebApp -ResourceGroupName $RGName -Name $FAResource.ResourceName
$newstate = (Get-AzureRmWebApp -ResourceGroupName $RGName -Name $FAResource.ResourceName).State
Write-Output ($FAResource.ResourceName " and its status is " $newstate)
}