Как определить, закончился ли сеанс Azure Powershell?

Я пишу Azure PowerShell script и для входа в Azure я вызываю Add-AzureAccount, который выведет окно входа в браузер.

Мне интересно, какой лучший способ проверить, не устарели ли учетные данные для проверки подлинности или нет, и, следовательно, если я снова позвоню Add-AzureAccount?

Что я сейчас делаю, так это то, что я просто вызываю Get-AzureVM и вижу, что $? равно $False. Звучит немного хакерским для меня, но, похоже, работает. И все еще работает, если в подписке нет развернутых виртуальных машин?

Ответ 1

Вам нужно запустить Get-AzureRmContext и проверить, заполнено ли свойство учетной записи. В последней версии AzureRM Get-AzureRmContext не вызывает ошибку (ошибка возникает командлетами, требующими активного сеанса). Однако, по-видимому, в некоторых других версиях он делает.

Это работает для меня:

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

Azure RM, но это будет проверять, есть ли активная учетная запись, иначе вызывать подсказку.

if ([string]::IsNullOrEmpty($(Get-AzureRmContext).Account)) {Login-AzureRmAccount}

Приветствия

Ответ 3

Я бы сделал это немного проще, чем предложил Питер. Просто вставьте эти строки где-нибудь в начале вашего script:

Try {
  Get-AzureRmContext
} Catch {
  if ($_ -like "*Login-AzureRmAccount to login*") {
    Login-AzureRmAccount
  }
}

Приветствия,

Ответ 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

Ответ 5

Следующее хорошо работает для меня, просто попробуйте выбрать подписку, если это ошибка, предложите логин:

Try
{
    Select-AzureRmSubscription -SubscriptionName $SUBSCRIPTIONNAME -ErrorAction Stop
}
Catch{
    Add-AzureRmAccount
    Select-AzureRmSubscription -SubscriptionName $SUBSCRIPTIONNAME
}

Ответ 6

Сохраните контекст Azure в переменной в начале вашего скрипта и проверьте свойство "Аккаунт", так как оно равно NULL, когда нет активного входа в систему.

$context = Get-AzureRmContext
if($context.Account -eq $null)
{
    Login-AzureRmAccount
}

Ответ 7

Вы можете проверить результат операции Add-AzureAccount

$result = Add-AzureAccount
if (!$result) {Write-Output "Login to Azure failed"}
else {Write-Output "Login successful - user $result.Id"}