Private/Content-Pages/Default/1Get-UDSystemUsers.ps1
Function 1Get-UDSystemUsers () { [CmdletBinding()] param ( [Parameter(ValueFromPipelineByPropertyName)] $refreshInterval ) $PageText = 'Users' $PageName = 'SystemUsers' $UDPage = New-UDPage -Name:($PageName) -Content { [int]$refreshInterval = $refreshInterval $PageLayout = '{"lg":[{"w":12,"h":3,"x":0,"y":0,"i":"grid-element-UsersDownload"},{"w":4,"h":10,"x":0,"y":4,"i":"grid-element-NewUsers"},{"w":4,"h":10,"x":4,"y":4,"i":"grid-element-UserState"},{"w":4,"h":10,"x":9,"y":4,"i":"grid-element-PrivilegedUsers"},{"w":4,"h":10,"x":0,"y":15,"i":"grid-element-MFAConfigured"},{"w":4,"h":10,"x":4,"y":15,"i":"grid-element-PasswordExpiration"},{"w":4,"h":10,"x":9,"y":15,"i":"grid-element-PasswordChanges"}]}' $unDrawColor = "#006cac" $LegendOptions = New-UDChartLegendOptions -Position bottom $Options = New-UDLineChartOptions -LegendOptions $LegendOptions New-UDCard -Title "Users" -Id "UsersDownload" -Content { $TotalUsers = Get-JCUser -returnProperties username | Measure-Object | Select-Object -ExpandProperty Count New-UDParagraph -Text "Displaying information from all users in your JumpCloud Organization. Displaying $TotalUsers users." New-UDButton -Icon 'cloud_download' -Text "Download All User Information" -OnClick { $DownloadsPath = '~' + '\' + 'Downloads' Set-Location $DownloadsPath Get-JCBackup -Users Show-UDToast -Message "User Information Downloaded To CSV In Downloads" -Duration 10000; } } New-UDGridLayout -Layout $PageLayout -Content { #SA-798/801 - New User Info New-UDElement -Tag "NewUsers" -Id "NewUsers" -RefreshInterval $refreshInterval -AutoRefresh -Endpoint { $Script:NewUsers = Get-JCUser -filterDateProperty created -dateFilter after -date (Get-Date).AddDays(-14) if ($NewUsers) { New-UDGrid -Title "New Users (Created in the last 14 days)" -Headers @("Username", "Activated", "Created") -Properties @("Username", "Activated", "Created") -NoFilter -Endpoint { $NewUsers | Sort-Object created -Descending | ForEach-Object { [PSCustomObject]@{ Username = (New-UDLink -Text $_.username -Url "https://console.jumpcloud.com/#/users/$($_._id)/details" -OpenInNewWindow); Activated = $(if ($_.activated) { New-UDIcon -Icon check } else { "" }); Created = $_.created; } } | Out-UDGridData } -NoExport } else { New-UDCard -Title "New Users (Created in the last 14 days)" -Content { New-UDunDraw -Name "add-user" -Color $unDrawColor New-UDParagraph -Text "No new users have been added your your JumpCloud Organization in the past 14 days." } } } New-UDElement -Tag "UserState" -Id "UserState" -RefreshInterval $refreshInterval -AutoRefresh -Endpoint { #SA-796 - User State Info $UserStates = @() $LockedUsers = Get-JCUser -account_locked $true $UserStates += $LockedUsers $ExpiredUsers = Get-JCUser -password_expired $true $UserStates += $ExpiredUsers $SuspendedUsers = Get-JCUser -suspended $true $UserStates += $SuspendedUsers $Script:UniqueUsers = $UserStates | Sort-Object username -Unique if ($UniqueUsers) { New-UDGrid -Title "User State Information" -Properties @("Username", "Email", "Suspended", "Expired", "Locked") -NoFilter -Endpoint { $UniqueUsers | ForEach-Object { [PSCustomObject]@{ Username = (New-UDLink -Text $_.username -Url "https://console.jumpcloud.com/#/users/$($_._id)/details" -OpenInNewWindow); Suspended = $(if ($_.suspended) { New-UDIcon -Icon check } else { "" }); Expired = $(if ($_.password_expired) { New-UDIcon -Icon check } else { "" }); Locked = $(if ($_.account_locked) { New-UDIcon -Icon check } else { "" }); } } | Out-UDGridData } -NoExport } else { New-UDCard -Title "User State Information" -Content { New-UDunDraw -Name "celebration" -Color $unDrawColor New-UDParagraph -Text "None of your users are Suspended, Expired or Locked Out of their JumpCloud accounts!" } } } #SA-799 - Privileged User Info New-UDElement -Tag "PrivilegedUsers" -Id "PrivilegedUsers" -RefreshInterval $refreshInterval -AutoRefresh -Endpoint { $PrivilegedUsers = @() $Sudo = Get-JCUser -sudo $true $PrivilegedUsers += $Sudo $SambaService = Get-JCUser -samba_service_user $true $PrivilegedUsers += $SambaService $LdapBinding = Get-JCUser -ldap_binding_user $true $PrivilegedUsers += $LdapBinding $script:UniquePrivilegedUsers = $PrivilegedUsers | Sort-Object username -Unique if ($UniquePrivilegedUsers) { New-UDGrid -Title "Privileged Users" -Properties @("Username", "GlobalAdmin", "LDAPBindUser", "SambaServiceUser") -NoFilter -Endpoint { $UniquePrivilegedUsers | ForEach-Object { [PSCustomObject]@{ Username = (New-UDLink -Text $_.username -Url "https://console.jumpcloud.com/#/users/$($_._id)/details" -OpenInNewWindow); GlobalAdmin = $(if ($_.sudo) { New-UDIcon -Icon check } else { "" }); LDAPBindUser = $(if ($_.ldap_binding_user) { New-UDIcon -Icon check } else { "" }); SambaServiceUser = $(if ($_.samba_service_user) { New-UDIcon -Icon check } else { "" }); } } | Out-UDGridData } -NoExport } else { New-UDCard -Title "Privileged Users" -Content { New-UDunDraw -Name "safe" -Color $unDrawColor New-UDParagraph -Text "None of your users are configured as Global Admin, LDAP Bind, or Samba Service users." } } } New-UDElement -Tag "MFAConfigured" -Id "MFAConfigured" -RefreshInterval $refreshInterval -AutoRefresh -Endpoint { New-UDChart -Title "User MFA Status" -Type Doughnut -Options $Options -Endpoint { Get-JCUser | Group-Object -Property totp_enabled, enable_user_portal_multifactor -NoElement | ForEach-Object { [PSCustomObject]@{ Name = $(if ($_.Name -eq "False, False") { "Not Required" } elseif ($_.Name -eq "False, True") { "Pending Configuration" } elseif ($_.Name -eq "True, False") { "Configured & Not Required" } elseif ($_.Name -eq "True, True") { "Configured & Required" }); Count = $_.Count; } } | Out-UDChartData -LabelProperty "Name" -DataProperty "Count" -BackgroundColor @("#e54852", "#ffb000" , "#006cac", "#2cc692") -HoverBackgroundColor @("#e54852", "#ffb000" , "#006cac", "#2cc692") } -OnClick { if ($EventData -ne "[]") { Show-UDModal -Content { New-UDTabContainer -Tabs { New-UDTab -Text "Not Required" -Content { New-UDGrid -Properties @("Username", "Email") -Endpoint { Get-JCUser -totp_enabled $False -enable_user_portal_multifactor $false | ForEach-Object { [PSCustomObject]@{ Username = $_.username; Email = $_.email; } } | Out-UDGridData } } New-UDTab -Text "Pending Configuration" -Content { New-UDGrid -Properties @("Username", "Email") -Endpoint { Get-JCUser -totp_enabled $False -enable_user_portal_multifactor $true | ForEach-Object { [PSCustomObject]@{ Username = $_.username; Email = $_.email; } } | Out-UDGridData } } New-UDTab -Text "Configured & Not Required" -Content { New-UDGrid -Properties @("Username", "Email") -Endpoint { Get-JCUser -totp_enabled $true -enable_user_portal_multifactor $False | ForEach-Object { [PSCustomObject]@{ Username = $_.username; Email = $_.email; } } | Out-UDGridData } } New-UDTab -Text "Configured & Required" -Content { New-UDGrid -Properties @("Username", "Email") -Endpoint { Get-JCUser -totp_enabled $true -enable_user_portal_multifactor $true | ForEach-Object { [PSCustomObject]@{ Username = $_.username; Email = $_.email; } } | Out-UDGridData } } } } } } } New-UDElement -Tag "PasswordExpiration" -Id "PasswordExpiration" -RefreshInterval $refreshInterval -AutoRefresh -Endpoint { if ($JCSettings.SETTINGS.passwordPolicy.enablePasswordExpirationInDays) { if (Get-JCUser -password_expired $False -filterDateProperty password_expiration_date -dateFilter before -date (Get-Date).AddDays(30)) { New-UDGrid -Title "Upcoming Password Expirations" -Headers @("Username", "Password Expiration Date")-Properties @("Username", "ExpirationDate") -Endpoint { Get-JCUser -password_expired $False -filterDateProperty password_expiration_date -dateFilter before -date (Get-Date).AddDays(30) | Sort-Object "password_expiration_date" | ForEach-Object { [PSCustomObject]@{ Username = (New-UDLink -Text $_.username -Url "https://console.jumpcloud.com/#/users/$($_._id)/details" -OpenInNewWindow); ExpirationDate = (Get-Date($_.password_expiration_date)).ToLocalTime(); } } | Out-UDGridData } } else { New-UDCard -Title "Upcoming Password Expirations" -Content { New-UDunDraw -Name "my-password" -Color $unDrawColor New-UDParagraph -Text "None of your users' passwords will expire in the next 30 days!" } } } else { New-UDCard -Title "Upcoming Password Expirations" -Content { New-UDunDraw -Name "my-password" -Color $unDrawColor New-UDParagraph -Text "Password expiration is not enabled for your JumpCloud Organization." } } } New-UDElement -Tag "PasswordExpiration" -Id "PasswordChanges" -RefreshInterval $refreshInterval -AutoRefresh -Endpoint { if ($JCSettings.SETTINGS.passwordPolicy.enablePasswordExpirationInDays -eq "True") { [int]$script:PasswordExpirationDays = $JCSettings.SETTINGS.passwordPolicy.passwordExpirationInDays [int]$script:PasswordExpirationDaysSearch = $PasswordExpirationDays - 14 if (Get-JCUser -filterDateProperty password_expiration_date -dateFilter after -date (Get-Date).AddDays($PasswordExpirationDaysSearch) -returnProperties password_expiration_date, username) { New-UDGrid -Title "Recent Password Changes" -Headers @("Username", "Password Change Date")-Properties @("Username", "ChangeDate") -Endpoint { Get-JCUser -activated $true -filterDateProperty password_expiration_date -dateFilter after -date (Get-Date).AddDays($PasswordExpirationDaysSearch) -returnProperties password_expiration_date, username | Sort-object 'password_expiration_date' -Descending | ForEach-Object { [PSCustomObject]@{ Username = (New-UDLink -Text $_.username -Url "https://console.jumpcloud.com/#/users/$($_._id)/details" -OpenInNewWindow); ChangeDate = (Get-Date($_.password_expiration_date)).AddDays(-$PasswordExpirationDays) } } | Out-UDGridData } } else { New-UDCard -Title "Recent Password Changes" -Content { New-UDunDraw -Name "no-data" -Color $unDrawColor New-UDParagraph -Text "No recent password changes" } } } else { New-UDCard -Title "Recent Password Changes" -Content { New-UDunDraw -Name "alert" -Color $unDrawColor New-UDParagraph -Text "Password expiration must be enabled to view recent password changes." } } } } } #$UDSideNavItem = New-UDSideNavItem -Text:($PageText) -PageName:($PageName) -Icon:('Users') Return [PSCustomObject]@{ 'UDPage' = $UDPage; # 'UDSideNavItem' = $UDSideNavItem; } } |