Scripts/Get-BPASession.ps1
function Get-BPASession { <# .SYNOPSIS Gets AutoMate BPA user sessions. .DESCRIPTION Get-BPASession returns open SMC sessions from AutoMate BPA. This function uses the audit event log to determine which sessions are open. The results of this function could be inaccurate if a session wasn't closed property, or if audit events have aged out since the last server start. .PARAMETER BPAServer The AutoMate BPA management server. .EXAMPLE # Gets all user sessions Get-BPASession .NOTES Author(s): : David Seibel Contributor(s) : Date Created : 11/16/2017 Date Modified : 02/27/2018 .LINK https://github.com/davidseibel/PoshBPA #> [CmdletBinding()] param ( [ValidateNotNullOrEmpty()] [string]$BPAServer ) $servers = @() if ($BPAServer) { $servers += $BPAServer } else { $servers += $global:BPAConnectionInfo.Server } $result = @() foreach ($server in $servers) { # Get events starting when the management server last started $mgtServer = Get-BPAServer -Type Management -BPAServer $server -Verbose:$VerbosePreference $uptimeDays = [int]($mgtServer.Uptime.Split(".")[0]) $uptimePart2 = $mgtServer.Uptime.Split(".")[1] $uptimeHours = [int]($uptimePart2.Split(":")[0]) $uptimeMinutes = [int]($uptimePart2.Split(":")[1]) $uptimeSeconds = [int]($uptimePart2.Split(":")[2]) $uptime = New-TimeSpan -Days $uptimeDays -Hours $uptimeHours -Minutes $uptimeMinutes -Seconds $uptimeSeconds $filterSet = @() $filterSet += @{Property = "EventType"; Comparator = "="; Value = [BPAAuditEventType]::UserConnectedSmc.value__} $filterSet += @{Property = "EventType"; Comparator = "="; Value = [BPAAuditEventType]::UserDisconnectedSmc.value__} $events = Get-BPAAuditEvent -FilterSet $filterSet -FilterSetMode Or -StartDate (Get-Date).Subtract($uptime) -BPAServer $server -Verbose:$VerbosePreference $connectEvents = ($events | Group-Object SessionID | Where-Object {$_.Count -eq 1}).Group | Where-Object {$_.EventType -eq [BPAAuditEventType]::UserConnectedSmc.value__} foreach ($connectEvent in $connectEvents) { $eventData = @{} $connectEvent.Data.Split("|") | ForEach-Object {$eventData.Add($_.Split(":")[0],$_.Split(":")[1])} $result = [PSCustomObject]@{ ID = $connectEvent.SessionID UserID = $connectEvent.UserID User = $eventData["User"] Machine = $eventData["MachineName"] IPAddress = $eventData["IP"] OSUser = $eventData["OSUser"] StartDateTime = $connectEvent.EventDateTime Duration = New-Timespan -Start $connectEvent.EventDateTime Type = [BPAConstructType]::MachineConnection.value__ TypeName = [BPAConstructType]::MachineConnection BPAServer = $server } $result.PSObject.TypeNames.Insert(0,"BPAConstructType.UserSession") $result } } } |