Elly
Elly

Reputation: 55

Combining & matching output from Get-AzureADUser, Get-AzureADSubscribedSku , Get-AzureADUserManager

Problem & what i have now


The script

comments are in norwegian btw, if they look strange lol

Connect-AzureAD

#variabel
$Users = Get-AzureADUser -All:$true | where-object { $null -ne $_.AssignedLicenses.SkuId } | Sort-Object CompanyName, UserPrincipalName| Select-Object -Property CompanyName, DisplayName, UserPrincipalName, Department, Mobile, TelephoneNumber

#formatting
$userlistTable = $Users | Format-Table 
$userlistHTML = $Users | ConvertTo-Html

#outputs
$userlistHTML > out.html # ut som HTML
$userlistTable > out.txt # ut som Tabell i .txt
$userlistTable           # ut som Tabell i terminal

My output as it stands right now:

CompanyName        DisplayName        UserPrincipalName          Department        Mobile          TelephoneNumber
-----------        -----------        -----------------          ----------        ------          ---------------
Company inc        Usser Name         [email protected]        Callsenter        12345678        87654321

What i would like. is a table that has all the info in the output of $Users to inclide the users "SkuPartNumber".
The field u get by running the command Get-AzureADSubscribedSku | Select -Property SkuPartNumber


I would also like to get the users "manager", that u get by running Get-AzureADUserManager.

that last command uses the users Object ID to find their manager. And to be honest, im very lost on how to combine these commands into one table.


its not the end of the world as it is right now. i could of just have multiple tables but having to manually cross reference these takes some time.

Im really not sure why these things are split into different commands to be honest. i get that a license is via 365 and not azure. but it seems a little backwards that i cant see the licenses from the command showing me all the user information. when a user class in powershell DOES infact show the sku ID. its burried within AssignedLicenses from running the command:

Get-AzureADUser | where-object -property UserPrincipalName -eq "[email protected]" | FL

This will give you among other things, this info:

AssignedLicenses               : {class AssignedLicense {
                                   DisabledPlans: System.Collections.Generic.List`1[System.String]
                                   SkuId: 3b555118-da6a-4418-894f-7df1e2096870
                                 }

conclusion

I know this was a long read. and if u made it this far im sorry. any help with this would be amazing. This might be super easy to do, but im very far from a powershell wiz. thanks again for reading, and any help.

Upvotes: 0

Views: 637

Answers (1)

Cpt.Whale
Cpt.Whale

Reputation: 5341

You can add additional properties to selected objects with calculated properties like Select @{label='name';expression={foo}}

$Users = Get-AzureADUser -All:$true

$Users | Where-Object { $_.AssignedLicenses.SkuId } | 
  Select-Object -Property UserPrincipalName,  ## other properties here...
    @{l='ManagerUPN';e={($_ | Get-AzureADUserManager).UserPrincipalName}},
    @{l='AssignedSKUs';e={$_.AssignedLicenses.SkuId -join ';'}}


UserPrincipalName ManagerUPN         AssignedSKUs                                                                                                  
----------------- ----------         ------------                                                                                                  
[email protected]   [email protected] 00000000-0000-0000-0000-000000000000;11111111-1111-1111-1111-111111111111

It can be slow to run Get-AzureADUserManager for every user, but that's how azure stores the relationships.

When you have a lot of users, it can be slightly faster to get the manager users first, then use Get-AzureADUserDirectReport -all $true to expand all the directreports in one call. The Microsoft.Graph.Users module is also a bit more lightweight

Upvotes: 1

Related Questions