Private/Get-IntuneAccessManagedDeviceUserMembership.ps1
|
function Get-IntuneAccessManagedDeviceUserMembership { [CmdletBinding()] [OutputType([pscustomobject])] param( [AllowNull()] [AllowEmptyString()] [string] $UserId ) if ([string]::IsNullOrWhiteSpace($UserId)) { return [PSCustomObject] @{ State = 'NotApplicable' UserId = $null GroupIds = @() Groups = @() Explanation = 'The managed device has no associated Microsoft Entra user.' } } $parsedUserId = [guid]::Empty if (-not [guid]::TryParse($UserId, [ref] $parsedUserId)) { return [PSCustomObject] @{ State = 'NotEvaluated' UserId = $UserId GroupIds = @() Groups = @() Explanation = 'The managed device returned an associated user ID that is not a GUID.' } } try { $memberships = @(Get-IntuneAccessGroupMembership -UserId $parsedUserId) return [PSCustomObject] @{ State = 'Evaluated' UserId = $parsedUserId.Guid GroupIds = @($memberships | ForEach-Object { [string] $_.Id }) Groups = $memberships Explanation = 'The associated user and transitive Microsoft Entra group memberships were resolved.' } } catch { return [PSCustomObject] @{ State = 'NotEvaluated' UserId = $parsedUserId.Guid GroupIds = @() Groups = @() Explanation = "The associated user's group memberships could not be resolved. $($_.Exception.Message)" } } } |