如何检测Azure Powershell会话是否已过期?

时间:2015-01-23 07:38:06

标签: powershell authentication azure

我正在编写Azure PowerShell脚本并登录Azure我会调用Add-AzureAccount,这将弹出浏览器登录窗口。

我想知道检查身份验证凭据是否已过期的最佳方法是什么,以及我是否应该再次致电Add-AzureAccount

我现在所做的就是拨打Get-AzureVM并查看$?是否等于$False。对我来说听起来有些讨厌,但似乎有效。如果订阅没有部署任何虚拟机,它仍然可以工作吗?

7 个答案:

答案 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"}