我正在尝试通过Azure上的Runbook设置脚本。我发现不寻常的是我可以通过Azure Powershell Cloud Shell运行命令并且它可以工作。但是,当我尝试通过Runbook运行它时,我收到一个错误(见下文)。
New-AzureRmSqlDatabaseExport : No subscription found in the context. Please ensure that the credentials you provided
are authorized to access an Azure subscription, then run Connect-AzureRmAccount to login.
At line:10 char:1
+ New-AzureRmSqlDatabaseExport `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [New-AzureRmSqlDatabaseExport], ApplicationException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Sql.ImportExport.Cmdlet.NewAzureSqlDatabaseExport
**使用的通用值
select col1, col2, COALESCE(<a fairly complex query>, col2) AS col3 from <a table>
我做错了什么?我使用的密码和用户名是在其他地方使用的密码和用户名,并且在我运行Cloud Shell中的脚本时工作。另外,“在上下文中找不到订阅”是什么意思?
答案 0 :(得分:1)
这意味着您需要在执行任何操作之前登录Azure。 Cloud Shell为您处理,而Azure自动化不会。
您可以使用Azure AD用户登录,证书登录或服务主体登录。真实账户不会起作用,因为它是互动的。
答案 1 :(得分:1)
在Azure Cloud Shell中,您已登录到您的帐户,因此您无需再次登录。但在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
}
}
在上面的代码中,您需要使用连接AzureRunAsConnection,它是由Azure默认创建的,您可以直接使用它。
有关此内容的详细信息,您还可以查看此question。