首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动化运行簿无法在运行时设置默认订阅

自动化运行簿无法在运行时设置默认订阅
EN

Stack Overflow用户
提问于 2018-01-03 08:49:58
回答 1查看 1.3K关注 0票数 0

克隆一个非经典的运行簿样本,并尝试将订阅设置为默认值。这给我带来了以下错误:

代码语言:javascript
复制
Select-AzureSubscription : The subscription name {nameofsubscription} doesn't exist.
Parameter name: name
At step1_validate:18 char:18
+ 
+ CategoryInfo          : CloseError: (:) [Select-AzureSubscription], ArgumentException
+ FullyQualifiedErrorId : Microsoft.WindowsAzure.Commands.Profile.SelectAzureSubscriptionCommand

如何选择或设置特定订阅为默认订阅?下面的方法抛出上述错误:

方法1

代码语言:javascript
复制
Select-AzureSubscription -SubscriptionName $defaultSubscriptionname –Default 

Get-AzureSubscription -SubscriptionId 123XXXXXXXXXXXXXXXXXX96eXX58 | Select-AzureSubscription

方法2

代码语言:javascript
复制
$subscriptionId = (Get-AzureRmSubscription | Out-GridView -Title 'Select Azure Subscription:' -PassThru).Id
Select-AzureRmSubscription -SubscriptionId $subscriptionId

尝试:获取特定的资源名称并进行配置更改,或者使用get,设置订阅似乎是强制性的。

注意:希望将自动化帐户中使用的服务主体添加到默认订阅中可能有帮助,我还尝试添加ApplicationId作为贡献者访问订阅的控制。虽然这里提到了我的运行簿和WebApps的订阅是相同的。参考:https://blogs.technet.microsoft.com/knightly/2017/05/26/using-azure-automation-with-multiple-subscriptions/#comment-1555 (我的方案都是在相同的订阅中)

编辑:粘贴代码

代码语言:javascript
复制
<# 
This PowerShell script was automatically converted to PowerShell Workflow so it can be run as a runbook.
Specific changes that have been made are marked with a comment starting with “Converter:”
#>
<#
.DESCRIPTION
    To watch php version old in app, and if found turn it off and apply 5.6 

.NOTES
    AUTHOR: HBala
    LASTEDIT: Jan 04, 2018
#>

workflow step1_validate {

# Converter: Wrapping initial script in an InlineScript activity, and passing any parameters for use within the InlineScript
# Converter: If you want this InlineScript to execute on another host rather than the Automation worker, simply add some combination of -PSComputerName, -PSCredential, -PSConnectionURI, or other workflow common parameters (http://technet.microsoft.com/en-us/library/jj129719.aspx) as parameters of the InlineScript
inlineScript {
    $connectionName = "AzureRunAsConnection"
    $myResourceGroupName = "DevstorageRG"
    $defaultSubscriptionname = "StandardDevStaging"
    $newPhpVersion = "5.6"

    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
        }
    }

    #Get all ARM resources from all resource groups
    $ResourceGroups = Get-AzureRmResourceGroup 

    foreach ($ResourceGroup in $ResourceGroups)
    {    
        Write-Output ("Showing resources in resource group " + $ResourceGroup.ResourceGroupName)

        if( $ResourceGroup.ResourceGroupName -eq $myResourceGroupName ){
            $Resources = Find-AzureRmResource -ResourceGroupNameContains $ResourceGroup.ResourceGroupName | Select ResourceName, ResourceType
            ForEach ($Resource in $Resources)
            {

                    Write-Output ($Resource.ResourceName + " of type " +  $Resource.ResourceType)

                    Write-Output ($Resource.ResourceName + " of type " +  $Resource.ResourceType)

                    #Switch-AzureMode AzureServiceManagement
                    # Local powershell connects and works perfect with what I wanted to achieve.
                    # On Automation account, Runbook migration, it threw Azure subcription not set error for Set-AzureWebsite. 
                    # so remove rest of the code and focused on few options to get the default as below
                    # which led me to post the thread.
                    # 
                    # Approach 1
                    Select-AzureSubscription -SubscriptionName $defaultSubscriptionname –Default 
                    Get-AzureSubscription -SubscriptionId 1238XXXXXXXXXXXe5XXXX8 | Select-AzureSubscription

                    # Approach 2
                    $subscriptionId = (Get-AzureRmSubscription | Out-GridView -Title 'Select Azure Subscription:' -PassThru).Id
                    Select-AzureRmSubscription -SubscriptionId $subscriptionId

                    Write-Output ( "==============Subscription ID :===========")
                    Write-Output( $subscriptionId)

                    # Wants to update config / php version parameters.
                    Set-AzureWebsite -Name $Resource.ResourceName -HttpLoggingEnabled 1 -PhpVersion 5.6

                    # Had tried this as well which was suggested by Jason. But appears not working.. 
                    # looks like I have messed it up.                        
                    Get-AzureRmWebApp -ResourceGroupName $myResourceGroupName -Name $Resource.ResourceName
                    Set-AzureRmWebApp -ResourceGroupName $myResourceGroupName -Name $Resource.ResourceName -HttpLoggingEnabled 1 -PhpVersion 5.6
            }
        }
        Write-Output ("Completed!@Line83")
    } 
}
}
EN

回答 1

Stack Overflow用户

发布于 2018-01-03 09:11:04

希望将自动帐户的service主体类型添加到默认订阅中可能会有所帮助

您说得对,我们可以使用Azure自动化帐户connections来选择订阅。

例如,我们可以新建一个连接,类型为Azure service principal

就像这样:

然后使用此powershell脚本选择连接:

代码语言:javascript
复制
$connectionName = "jason"
try
{
    # Get the connection "jason "
    $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
  }
}

通过这种方式,我们可以使用连接来选择订阅。

顺便说一句,我们可以按照这个文章创建服务主体。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48073993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档