我正在编写Azure PowerShell脚本并登录Azure我会调用Add-AzureAccount
,这将弹出浏览器登录窗口。
我想知道检查身份验证凭据是否已过期的最佳方法是什么,以及我是否应该再次致电Add-AzureAccount
?
我现在所做的就是拨打Get-AzureVM
并查看$?
是否等于$False
。对我来说听起来有些讨厌,但似乎有效。如果订阅没有部署任何虚拟机,它仍然可以工作吗?
答案 0 :(得分:27)
Azure RM,但这会检查是否有活动帐户,否则会提示。
if ([string]::IsNullOrEmpty($(Get-AzureRmContext).Account)) {Login-AzureRmAccount}
干杯
答案 1 :(得分:16)
您需要运行Get-AzureRmContext并检查是否填充了Account属性。在最新版本的AzureRM中,Get-AzureRmContext不会引发错误(由需要活动会话的cmdlet引发错误)。然而,显然在其他一些版本中它确实如此。
这对我有用:
function Login
{
$needLogin = $true
Try
{
$content = Get-AzureRmContext
if ($content)
{
$needLogin = ([string]::IsNullOrEmpty($content.Account))
}
}
Catch
{
if ($_ -like "*Login-AzureRmAccount to login*")
{
$needLogin = $true
}
else
{
throw
}
}
if ($needLogin)
{
Login-AzureRmAccount
}
}
答案 2 :(得分:9)
我使它比彼得提出的要简单一点。只需在脚本开头的某处插入这些行:
Try {
Get-AzureRmContext
} Catch {
if ($_ -like "*Login-AzureRmAccount to login*") {
Login-AzureRmAccount
}
}
干杯,
答案 3 :(得分:4)
试试这个:
function Check-Session () {
$Error.Clear()
#if context already exist
Get-AzureRmContext -ErrorAction Continue
foreach ($eacherror in $Error) {
if ($eacherror.Exception.ToString() -like "*Run Login-AzureRmAccount to login.*") {
Add-AzureAccount
}
}
$Error.Clear();
}
#check if session exists, if not then prompt for login
Check-Session
答案 4 :(得分:0)
以下适用于我,只是尝试选择订阅,如果错误,请提示登录:
Try
{
Select-AzureRmSubscription -SubscriptionName $SUBSCRIPTIONNAME -ErrorAction Stop
}
Catch{
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionName $SUBSCRIPTIONNAME
}
答案 5 :(得分:0)
将Azure上下文存储在脚本开头的变量中,并检查“Account”属性,因为当没有活动登录时它为NULL。
$context = Get-AzureRmContext
if($context.Account -eq $null)
{
Login-AzureRmAccount
}
答案 6 :(得分:-3)
您可以检查Add-AzureAccount操作的结果
$result = Add-AzureAccount
if (!$result) {Write-Output "Login to Azure failed"}
else {Write-Output "Login successful - user $result.Id"}