Как определить, закончился ли сеанс 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"}