Вложенная инструкция If Powershell

#azure #powershell

Вопрос:

Я новичок в PS и пытаюсь найти пользователя или группу (Azure) на основе пользовательского ввода $guid . Если пользователь найден, я бы хотел, чтобы скрипт не искал группы. Мой сценарий не работает, и я не уверен, какую ошибку я совершаю. Я был бы с радостью признателен, если бы кто-нибудь мог указать, что здесь не так и как это исправить. Спасибо!

 #Find user/group
$user = Get-AzADUser -ObjectId $guid
$group = $false

if ($user)
{
    $user | FL Mail, MailNickName; break
}

else
{
    Get-AzADGroup -ObjectId $guid | FL DisplayName, MailNickName
    $group = $true

    if ($group -eq $false)
    {
        Write-Warning "No matches found."
    }
}
 

Комментарии:

1. Вы устанавливаете $group = $true раньше if ($group -eq $false) , поэтому ваш if блок по определению никогда не вводится.

2. Мы ничего от вас не слышали.. Решил ли какой-либо из приведенных ответов вашу проблему? Если это так, пожалуйста, подумайте о том, чтобы принять его, нажав на большой значок галочки слева. Это поможет другим людям с аналогичным вопросом найти его легче.

Ответ №1:

Несколько рекомендаций:

  • Удалить $group = $true , как рекомендовано mklement0
  • Также измените эту строку с Get-AzADGroup -ObjectId $guid | FL DisplayName, MailNickName на $group = Get-AzADGroup -ObjectId $guid
  • Удалите разрыв из следующей строки, это требуется только в циклах $user | FL Mail, MailNickName; break
  • Используйте $null для инициализации переменных вместо $false

Вот как должен выглядеть ваш сценарий:

 #Find user/group
$user = Get-AzADUser -ObjectId $guid

# it is better to initialize a variable with $null instead of $false
$group = $null

if ($user)
{
    # also no need to "break" use if you are not using loop so I removed "break"
    $user | FL Mail, MailNickName
}

else
{
    $group = Get-AzADGroup -ObjectId $guid
    
    if ($group -eq $false)
    {
        Write-Warning "No matches found."
    }
    else {
        $group | FL DisplayName, MailNickName
    }

}
 

Просто чтобы сделать ваш сценарий меньше:

 #Find user/group
$user = $null
$group = $null

$user = Get-AzADUser -ObjectId $guid
$group = Get-AzADGroup -ObjectId $guid

if ($user)
{
    $user | FL Mail, MailNickName
}
if ($group) 
{
    $group | FL DisplayName, MailNickName
}

 

Комментарии:

1. Спасибо! Первый из них мне намного легче понять 🙂 Однако я не получал предупреждающего сообщения. Однако изменение ‘($group -eq $false)’ на ($group -eq $null) сработало. Еще раз спасибо вам!

Ответ №2:

Почему бы не упростить до чего-то подобного:

 #Find user or group
$object = Get-AzADUser -ObjectId $guid
if (!$object) { $object = Get-AzADGroup -ObjectId $guid } # not a user; try group
if ($object) { $object | Select-Object DisplayName, MailNickName }
else { Write-Warning "No matches found." }
 

Комментарии:

1. Большое вам спасибо! Не могли бы вы объяснить, почему имя переменной не нужно было менять при использовании команды Get-AzADGroup?

2. @PotWang Это потому, что я только пытаюсь получить объект, будь то пользователь или группа. Используя ту же переменную, все, что вам нужно, — это проверить, есть ли у вас объект или нет.