2015-01-23 14 views
11

Piszę skrypt usługi Azure PowerShell i loguję się do usługi Azure I pod numerem Add-AzureAccount, która spowoduje otwarcie okna logowania przeglądarki.Jak wykryć, że sesja Azure PowerShell wygasła?

Zastanawiam się, jaki jest najlepszy sposób sprawdzenia, czy poświadczenia uwierzytelnienia wygasły, czy nie, a zatem czy powinienem ponownie zadzwonić pod numer Add-AzureAccount?

Co mam teraz zrobić, to po prostu zadzwonić pod numer Get-AzureVM i sprawdzić, czy $? jest równy $False. Brzmi trochę hackish do mnie, ale wydaje się działać. Czy nadal działa, jeśli subskrypcja nie zawiera żadnych maszyn wirtualnych?

+0

Johan Paul, jeśli nadal jesteś tam, powinieneś przyjąć Aviad Ezdrasza odpowiedź ... – McGuireV10

Odpowiedz

6

Musisz uruchomić Get-AzureRmContext i sprawdzić, czy nieruchomość Konto jest wypełniana. W najnowszej wersji AzureRM Get-AzureRmContext nie powoduje błędów (błąd jest wywoływany przez cmdlety wymagające aktywnej sesji). Jednak najwyraźniej w niektórych innych wersjach tak.

Działa to dla mnie:

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 
    } 
} 
-3

Można sprawdzić wynik operacji Add-AzureAccount

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

I nie sądzę, że odpowiada na to konkretne pytanie. To odpowiada na http://stackoverflow.com/questions/28105128/how-to-detect-if-azure-add-azureaccount-login-fails- or-is-is-canceled i w rzeczywistości użyłem podobnego kodu jak twój, aby odpowiedzieć na to pytanie. –

+1

Odpowiedź tutaj nie jest odpowiedzią na pytanie, czy mogę się dowiedzieć, czy sesja wygasła i czy muszę wyświetlić ekran logowania za pomocą Add-AzureAccount. –

4

Spróbuj tego:

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 
0

Poniższe działa dobrze dla mnie, po prostu spróbuj wybrać abonament, czy to błędy, szybka do logowania:

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

Uczyniłbym to nieco prostszym, niż zaproponował Peter. Wystarczy wstawić te linie gdzieś na początku skryptu:

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

Wiwaty,

+1

Get-AzureRmContent nie zawsze zawiedzie, gdy wymagane jest logowanie. –

+0

Cześć Aviad, proszę o szczegóły. Czy masz więcej niż jedną subskrypcję aktywną? Jeśli 'Get-AzureRmContext' nie ulega awarii, czy podczas próby uzyskania dostępu do zasobów Azure pojawia się błąd w skrypcie? – Jacek

+0

To rozwiązanie nie jest poprawne. OP odnosi się do Azure ASM, a to rozwiązanie wykorzystuje ARM. Od dzisiaj logowanie się w usłudze Azure ARM nie zezwala na uruchamianie poleceń cmdlet Azure ASM dla użytkowników uzyskujących dostęp do subskrypcji udostępnionej. – sammarcow

15

Azure RM, ale będzie to sprawdzić, czy jest aktywne konto inaczej zwymiotować wiersz.

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

Cheers

+0

Działa to świetnie i jest bardzo proste. –

Powiązane problemy