在 Azure 自动化 Runbook 中执行时出现 Set-AzureRmContext 错误

Set-AzureRmContext error when executed within an Azure Automation Runbook

更新:

好像其他人遇到了同样的问题并报告了它。

我在从 Azure 自动化运行手册调用简单 PowerShell 脚本时遇到问题。同一段代码在本地运行时完美无缺。

我已在 Azure Active Directory(托管在 Azure German Cloud 中)中添加了一个带有密码凭据的服务主体,并授予其参与者访问订阅(也托管在 Azure German Cloud 中)的权限。

Azure 自动化服务托管在北欧,因为它目前在 Azure German Cloud 中不可用。

我要做的就是使用 Add-AzureRmAccount cmdlet 使用上述主体登录到我的订阅。之后,我尝试使用 Set-AzureRmContext 设置当前上下文并收到以下错误消息:

Set-AzureRmContext : Please provide a valid tenant or a valid subscription.

At line:26 char:1

+ Set-AzureRmContext -TenantId $TenantId -Su ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException

  + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
$TenantId =""

$ApplicationId =""

$ClientSecret =""

$SubscriptionId =""



$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId

Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 

Login-AzureRMAccount to set up your Azure credentials.

At line:77 char:18

+ ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
$ClientSecret =""

$ApplicationId =""

$SubscriptionId =""



#New PSCredential Object

$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



#Login to subscription

Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId



#Export Database

New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"

# Authenticate to Azure with service principal and certificate, and set subscription

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose

Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Login-AzureRmAccount `

  -ServicePrincipal `

  -CertificateThumbprint $conn.CertificateThumbprint `

  -ApplicationId $conn.ApplicationId `

  -TenantId $conn.TenantID `

  -Environment AzureGermanCloud
$subscriptionId=""

$tenantid=""

$clientid=""

$password=""

$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force

$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword

Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

这是我尝试运行的脚本(将配置留空):

Set-AzureRmContext : Please provide a valid tenant or a valid subscription.

At line:26 char:1

+ Set-AzureRmContext -TenantId $TenantId -Su ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException

  + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
$TenantId =""

$ApplicationId =""

$ClientSecret =""

$SubscriptionId =""



$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId

Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 

Login-AzureRMAccount to set up your Azure credentials.

At line:77 char:18

+ ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
$ClientSecret =""

$ApplicationId =""

$SubscriptionId =""



#New PSCredential Object

$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



#Login to subscription

Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId



#Export Database

New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"

# Authenticate to Azure with service principal and certificate, and set subscription

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose

Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Login-AzureRmAccount `

  -ServicePrincipal `

  -CertificateThumbprint $conn.CertificateThumbprint `

  -ApplicationId $conn.ApplicationId `

  -TenantId $conn.TenantID `

  -Environment AzureGermanCloud
$subscriptionId=""

$tenantid=""

$clientid=""

$password=""

$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force

$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword

Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

我也尝试使用 Login-AzureRmAccount 没有成功。我还可以使用 Get-AzureRmResourceGroup cmdlet 来检索资源组,因此登录似乎可以正常工作。

所有 Azure 模块都更新到最新版本。

TLTR:

我的主要目标是使用 runnbook 中的 New-AzureRmSqlDatabaseExport 启动 SQL 导出作业,但似乎上述错误会导致 cmdlet 失败并显示以下消息:

Set-AzureRmContext : Please provide a valid tenant or a valid subscription.

At line:26 char:1

+ Set-AzureRmContext -TenantId $TenantId -Su ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException

  + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
$TenantId =""

$ApplicationId =""

$ClientSecret =""

$SubscriptionId =""



$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId

Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 

Login-AzureRMAccount to set up your Azure credentials.

At line:77 char:18

+ ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
$ClientSecret =""

$ApplicationId =""

$SubscriptionId =""



#New PSCredential Object

$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



#Login to subscription

Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId



#Export Database

New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"

# Authenticate to Azure with service principal and certificate, and set subscription

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose

Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Login-AzureRmAccount `

  -ServicePrincipal `

  -CertificateThumbprint $conn.CertificateThumbprint `

  -ApplicationId $conn.ApplicationId `

  -TenantId $conn.TenantID `

  -Environment AzureGermanCloud
$subscriptionId=""

$tenantid=""

$clientid=""

$password=""

$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force

$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword

Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

以下是对我有用的代码(常规 dc 区域)。如果它不起作用,请转到自动化帐户 >> 模块 >> 更新 Azure 模块。

Set-AzureRmContext : Please provide a valid tenant or a valid subscription.

At line:26 char:1

+ Set-AzureRmContext -TenantId $TenantId -Su ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException

  + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
$TenantId =""

$ApplicationId =""

$ClientSecret =""

$SubscriptionId =""



$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId

Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 

Login-AzureRMAccount to set up your Azure credentials.

At line:77 char:18

+ ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
$ClientSecret =""

$ApplicationId =""

$SubscriptionId =""



#New PSCredential Object

$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



#Login to subscription

Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId



#Export Database

New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"

# Authenticate to Azure with service principal and certificate, and set subscription

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose

Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Login-AzureRmAccount `

  -ServicePrincipal `

  -CertificateThumbprint $conn.CertificateThumbprint `

  -ApplicationId $conn.ApplicationId `

  -TenantId $conn.TenantID `

  -Environment AzureGermanCloud
$subscriptionId=""

$tenantid=""

$clientid=""

$password=""

$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force

$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword

Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

更新

也许使用运行方式帐户运行可能是解决此问题的方法。通过导航到 Azure 自动化帐户 >> 帐户设置 >> 运行方式帐户来创建一个。这是一个示例代码。

Set-AzureRmContext : Please provide a valid tenant or a valid subscription.

At line:26 char:1

+ Set-AzureRmContext -TenantId $TenantId -Su ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException

  + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
$TenantId =""

$ApplicationId =""

$ClientSecret =""

$SubscriptionId =""



$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId

Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 

Login-AzureRMAccount to set up your Azure credentials.

At line:77 char:18

+ ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
$ClientSecret =""

$ApplicationId =""

$SubscriptionId =""



#New PSCredential Object

$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



#Login to subscription

Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId



#Export Database

New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"

# Authenticate to Azure with service principal and certificate, and set subscription

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose

Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Login-AzureRmAccount `

  -ServicePrincipal `

  -CertificateThumbprint $conn.CertificateThumbprint `

  -ApplicationId $conn.ApplicationId `

  -TenantId $conn.TenantID `

  -Environment AzureGermanCloud
$subscriptionId=""

$tenantid=""

$clientid=""

$password=""

$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force

$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword

Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

几周前我遇到了同样的问题,首先使用以下方法登录 Azure 帐户(我想你已经这样做了):

Set-AzureRmContext : Please provide a valid tenant or a valid subscription.

At line:26 char:1

+ Set-AzureRmContext -TenantId $TenantId -Su ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException

  + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
$TenantId =""

$ApplicationId =""

$ClientSecret =""

$SubscriptionId =""



$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId

Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 

Login-AzureRMAccount to set up your Azure credentials.

At line:77 char:18

+ ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
$ClientSecret =""

$ApplicationId =""

$SubscriptionId =""



#New PSCredential Object

$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



#Login to subscription

Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId



#Export Database

New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"

# Authenticate to Azure with service principal and certificate, and set subscription

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose

Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Login-AzureRmAccount `

  -ServicePrincipal `

  -CertificateThumbprint $conn.CertificateThumbprint `

  -ApplicationId $conn.ApplicationId `

  -TenantId $conn.TenantID `

  -Environment AzureGermanCloud
$subscriptionId=""

$tenantid=""

$clientid=""

$password=""

$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force

$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword

Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

然后从 Azure 中获取订阅 ID 并使用 ID 而不是名称选择订阅,如下所示:

Set-AzureRmContext : Please provide a valid tenant or a valid subscription.

At line:26 char:1

+ Set-AzureRmContext -TenantId $TenantId -Su ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException

  + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
$TenantId =""

$ApplicationId =""

$ClientSecret =""

$SubscriptionId =""



$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId

Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 

Login-AzureRMAccount to set up your Azure credentials.

At line:77 char:18

+ ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
$ClientSecret =""

$ApplicationId =""

$SubscriptionId =""



#New PSCredential Object

$secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)



#Login to subscription

Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId



#Export Database

New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"

# Authenticate to Azure with service principal and certificate, and set subscription

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose

Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}

$connectionAssetName ="AzureRunAsConnection"

$conn = Get-AutomationConnection -Name $ConnectionAssetName



Login-AzureRmAccount `

  -ServicePrincipal `

  -CertificateThumbprint $conn.CertificateThumbprint `

  -ApplicationId $conn.ApplicationId `

  -TenantId $conn.TenantID `

  -Environment AzureGermanCloud
$subscriptionId=""

$tenantid=""

$clientid=""

$password=""

$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force

$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword

Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

这似乎是一个已知问题,我无法找到解决方法。但是有两种解决方法:

  • 使用混合 Runnbook Worker(Walter 提到 - MSFT)
  • 使用带有证书凭据的 RunAsAccount(Bruno Faria 提到)
  • 指定-Environment 参数很重要。否则我得到以下异常:

    Login-AzureRmAccount : AADSTS90038: Confidential Client is not

    supported in Cross Cloud request.

    这是我用来从托管在 NorthEurope 的 Azure Runbook 登录到 AzureGermanCloud (MCD) 的代码:

    Set-AzureRmContext : Please provide a valid tenant or a valid subscription.
    
    At line:26 char:1
    
    + Set-AzureRmContext -TenantId $TenantId -Su ...
    
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
      + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException
    
      + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
    $TenantId =""
    
    $ApplicationId =""
    
    $ClientSecret =""
    
    $SubscriptionId =""
    
    
    
    $secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force
    
    $mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)
    
    
    
    Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId
    
    Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 
    
    Login-AzureRMAccount to set up your Azure credentials.
    
    At line:77 char:18
    
    + ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
    $ClientSecret =""
    
    $ApplicationId =""
    
    $SubscriptionId =""
    
    
    
    #New PSCredential Object
    
    $secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force
    
    $mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)
    
    
    
    #Login to subscription
    
    Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId
    
    
    
    #Export Database
    
    New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"
    
    # Authenticate to Azure with service principal and certificate, and set subscription
    
    $connectionAssetName ="AzureRunAsConnection"
    
    $conn = Get-AutomationConnection -Name $ConnectionAssetName
    
    
    
    Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose
    
    Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
    Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}
    
    $connectionAssetName ="AzureRunAsConnection"
    
    $conn = Get-AutomationConnection -Name $ConnectionAssetName
    
    
    
    Login-AzureRmAccount `
    
      -ServicePrincipal `
    
      -CertificateThumbprint $conn.CertificateThumbprint `
    
      -ApplicationId $conn.ApplicationId `
    
      -TenantId $conn.TenantID `
    
      -Environment AzureGermanCloud
    $subscriptionId=""
    
    $tenantid=""
    
    $clientid=""
    
    $password=""
    
    $userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
    
    $userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword
    
    Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

    当您登录您的 Azure 帐户时,您可以使用指定的订阅 ID。您可以尝试以下脚本。

    Set-AzureRmContext : Please provide a valid tenant or a valid subscription.
    
    At line:26 char:1
    
    + Set-AzureRmContext -TenantId $TenantId -Su ...
    
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
      + CategoryInfo     : CloseError: (:) [Set-AzureRmContext], ArgumentException
    
      + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand
    $TenantId =""
    
    $ApplicationId =""
    
    $ClientSecret =""
    
    $SubscriptionId =""
    
    
    
    $secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force
    
    $mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)
    
    
    
    Add-AzureRmAccount -ServicePrincipal -Environment 'AzureGermanCloud' -Credential $mycreds -TenantId $TenantId
    
    Set-AzureRmContext -TenantId $TenantId -SubscriptionId $SubscriptionIdNew-AzureRmSqlDatabaseExport : Your Azure credentials have not been set up or have expired, please run 
    
    Login-AzureRMAccount to set up your Azure credentials.
    
    At line:77 char:18
    
    + ... rtRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $Resource
    $ClientSecret =""
    
    $ApplicationId =""
    
    $SubscriptionId =""
    
    
    
    #New PSCredential Object
    
    $secpasswd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force
    
    $mycreds = New-Object System.Management.Automation.PSCredential ($ApplicationId , $secpasswd)
    
    
    
    #Login to subscription
    
    Login-AzureRmAccount -Credential $mycreds -SubscriptionId $SubscriptionId
    
    
    
    #Export Database
    
    New-AzureRmSqlDatabaseExport -ResourceGroupName"<RG>" -ServerName"<SQLSERVERNAME>" -DatabaseName"<DATABASENAME>" -StorageKeyType"StorageAccessKey" -StorageKey"<STRKEY>" -StorageUri"<URITOFILE>" -AdministratorLogin"<DBLOGIN>" -AdministratorLoginPassword"<DBPASS>"
    
    # Authenticate to Azure with service principal and certificate, and set subscription
    
    $connectionAssetName ="AzureRunAsConnection"
    
    $conn = Get-AutomationConnection -Name $ConnectionAssetName
    
    
    
    Add-AzureRmAccount -ServicePrincipal -Tenant $conn.TenantID -ApplicationId $conn.ApplicationId -CertificateThumbprint $conn.CertificateThumbprint -ErrorAction Stop | Write-Verbose
    
    Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose
    Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId {insert-subscription-id}
    
    $connectionAssetName ="AzureRunAsConnection"
    
    $conn = Get-AutomationConnection -Name $ConnectionAssetName
    
    
    
    Login-AzureRmAccount `
    
      -ServicePrincipal `
    
      -CertificateThumbprint $conn.CertificateThumbprint `
    
      -ApplicationId $conn.ApplicationId `
    
      -TenantId $conn.TenantID `
    
      -Environment AzureGermanCloud
    $subscriptionId=""
    
    $tenantid=""
    
    $clientid=""
    
    $password=""
    
    $userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
    
    $userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $clientid, $userPassword
    
    Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential -Environment 'AzureGermanCloud'

相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161