Использование сценария PowerShell. Если Else или Try catch, как я могу изменить приведенный ниже сценарий, если тип члена группы = Компьютер, затем используйте Get-MGDevice для отображения отображаемого имени.
$GROUP_LIST = Get-MgGroup -Filter "groupTypes/any(c:c eq 'DynamicMembership')" -All:$true | Select-Object Id, DisplayName, Description, GroupTypes
$users = $GROUP_LIST | ForEach-Object {
$Group = $_
Write-Host "Processing $($Group.DisplayName)" -ForegroundColor Cyan
$members = Get-MgGroupMember -GroupId $Group.Id -Property "id,displayName,userPrincipalName,companyName"
Write-Host "`t [$($Group.DisplayName)] Member count [$($members.Count)]" -ForegroundColor Yellow
$members | ForEach-Object {
$member = $_
Try {
$user = Get-MgUser -UserId $member.Id -Property Id, DisplayName, Mail, UserPrincipalName, CompanyName |
Select-Object Id, DisplayName, Mail, UserPrincipalName, CompanyName
[PSCustomObject]@{
Group = $Group.DisplayName
Name = $user.DisplayName
USERPRINCIPALNAME = $user.Mail
CompanyName = $user.CompanyName
}
} Catch {
Try {
$device = Get-MgDevice -DeviceId $member.Id -Property Id, DisplayName |
Select-Object Id, DisplayName
[PSCustomObject]@{
Group = $Group.DisplayName
Name = $device.DisplayName
USERPRINCIPALNAME = "N/A"
CompanyName = "N/A"
}
} Catch {
Write-Host "Unable to find user or device for member ID $($member.Id)" -ForegroundColor Red
[PSCustomObject]@{
Group = $Group.DisplayName
Name = "Unknown"
USERPRINCIPALNAME = "N/A"
CompanyName = "N/A"
}
}
}
}
}
$users | Out-GridView
Приведенный выше сценарий PowerShell отлично работает для части Get-MgUser, однако Get-MgDevice не возвращает никакого значения или пустого.
Спасибо за помощь.
да, это имеет смысл. спасибо @iRon за предложение.
Чтобы получить пользователей групп (пользователей/устройств), измените скрипт, как показано ниже, используя условие if
/else
, как предложено @iRon:
$GROUP_LIST = Get-MgGroup -Filter "groupTypes/any(c:c eq 'DynamicMembership')" -All:$true | Select-Object Id, DisplayName, Description, GroupTypes
$users = $GROUP_LIST | ForEach-Object {
$Group = $_
Write-Host "Processing $($Group.DisplayName)" -ForegroundColor Cyan
$members = Get-MgGroupMember -GroupId $Group.Id -Property "id,displayName,userPrincipalName,companyName"
Write-Host "`t [$($Group.DisplayName)] Member count [$($members.Count)]" -ForegroundColor Yellow
$members | ForEach-Object {
$member = $_
$isUser = $false
$isDevice = $false
$user = $null
$device = $null
Try {
$user = Get-MgUser -UserId $member.Id -Property Id, DisplayName, Mail, UserPrincipalName, CompanyName -ErrorAction Stop
$isUser = $true
} Catch {
Write-Host "User not found for member ID $($member.Id), trying as device..." -ForegroundColor Magenta
}
If (!$isUser) {
Try {
$device = Get-MgDevice -DeviceId $member.Id -Property Id, DisplayName -ErrorAction Stop
$isDevice = $true
} Catch {
Write-Host "Device not found for member ID $($member.Id)" -ForegroundColor Red
}
}
If ($isUser) {
[PSCustomObject]@{
Group = $Group.DisplayName
Name = $user.DisplayName
USERPRINCIPALNAME = $user.Mail
CompanyName = $user.CompanyName
}
} ElseIf ($isDevice) {
[PSCustomObject]@{
Group = $Group.DisplayName
Name = $device.DisplayName
USERPRINCIPALNAME = "N/A"
CompanyName = "N/A"
}
} Else {
[PSCustomObject]@{
Group = $Group.DisplayName
Name = "Unknown"
USERPRINCIPALNAME = "N/A"
CompanyName = "N/A"
}
}
}
}
$users | Out-GridView
Я добавил устройства в качестве членов группы в testrukdevicegrp:
Спасибо @rukmini за обновление, да, теперь оно работает.
Рад знать, что это работает :)
Мой совет — используйте оператор
try
/catch
только для непредвиденных ошибок и ошибок, которые вы не можете контролировать. В этой ситуации вы, вероятно, можете просто использовать условиеif
/else
. Кроме того, я задаюсь вопросом, возвращает лиGet-MgUser
ошибку, если пользователь(и) не может быть найден, или просто возвращает (автоматизация)$Null
.