#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 Это потому, что я только пытаюсь получить объект, будь то пользователь или группа. Используя ту же переменную, все, что вам нужно, — это проверить, есть ли у вас объект или нет.