diff --git a/lib/provider/users/Get-IcingaLoggedOnUsers.psm1 b/lib/provider/users/Get-IcingaLoggedOnUsers.psm1 new file mode 100644 index 0000000..351525c --- /dev/null +++ b/lib/provider/users/Get-IcingaLoggedOnUsers.psm1 @@ -0,0 +1,43 @@ +function Get-IcingaLoggedOnUsers() +{ + param( + [array]$UserFilter = @() + ); + + [hashtable]$UserList = @{}; + [int]$UserCount = 0; + $UserList.Add('users', @{ }); + + $Users = Get-CIMInstance Win32_LoggedOnUser | Select-Object Antecedent, Dependent; + + foreach ($user in $Users) { + [string]$username = $user.Antecedent.Name; + + if ($UserFilter.Count -ne 0) { + if (-Not $UserFilter.Contains($username)) { + continue; + } + } + + $UserCount += 1; + + if ($UserList.users.ContainsKey($username) -eq $FALSE) { + $UserList.users.Add( + $username, + @{ + 'domains' = @($user.Antecedent.Domain); + 'logonid' = @($user.Dependent.LogonId); + 'count' = 1; + } + ); + } else { + $UserList.users[$username].domains += $user.Antecedent.Domain; + $UserList.users[$username].logonid += $user.Dependent.LogonId; + $UserList.users[$username].count += 1; + } + } + + $UserList.Add('count', $UserCount); + + return $UserList; +}