更新
好像其他人有同样的问题并且reported它。
从Azure自动化Runbook调用时,我遇到了一个简单的PowerShell脚本问题。同一条代码在本地运行时无瑕疵。
我已在Azure Active Directory(托管在Azure德语云中)中添加了服务主体,并使用密码凭据并授予其参与者对订阅的访问权限(也包含在Azure德国云)。
Azure自动化服务托管在北欧,因为它目前在Azure德国云中不可用。
我尝试做的就是使用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 $SubscriptionId
我还试图使用Login-AzureRmAccount
但没有成功。此外,我可以使用Get-AzureRmResourceGroup
cmdlet来检索资源组,以便登录似乎有效。
所有Azure模块都更新为最新版本。
TLTR:
我的主要目标是使用runnbook中的New-AzureRmSqlDatabaseExport
启动SQL导出作业,但似乎上述错误导致cmdlet失败,并显示以下消息:
New-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
答案 0 :(得分:2)
几个星期前我遇到了同样的问题,首先使用以下方式登录Azure帐户(我认为你已经这样做了):
Login-AzureRmAccount
然后从Azure获取订阅ID并使用ID而不是名称选择订阅,如下所示:
Select-AzureRmSubscription -SubscriptionId {insert-subscription-id}
答案 1 :(得分:2)
以下是适用于我的代码(常规直流区域)。如果不起作用,请转到自动化帐户>> 模块>> 更新Azure模块。
$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>"
更新
使用运行方式帐户运行可能是该问题的解决方法。通过导航到 Azure自动化帐户&gt;&gt;创建一个帐户设置&gt;&gt; 运行方式帐户。这是一个示例代码。
# 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
答案 2 :(得分:1)
当您登录Azure帐户时,您可以使用指定的订阅ID。您可以尝试以下脚本。
fieldBitMask
答案 3 :(得分:1)
看起来这是known issue,我无法找到解决方法。但是有两个变通办法:
指定-Environment
参数很重要。否则我得到以下异常:
登录 - AzureRmAccount:AADSTS90038:机密客户端不是 跨云请求支持。
以下是我用于从NorthEurope托管的Azure Runbook登录AzureGermanCloud(MCD)的代码:
$connectionAssetName = "AzureRunAsConnection"
$conn = Get-AutomationConnection -Name $ConnectionAssetName
Login-AzureRmAccount `
-ServicePrincipal `
-CertificateThumbprint $conn.CertificateThumbprint `
-ApplicationId $conn.ApplicationId `
-TenantId $conn.TenantID `
-Environment AzureGermanCloud