diff --git a/Get-TeamsStatus.ps1 b/Get-TeamsStatus.ps1 index b119950..5ac1c1f 100644 --- a/Get-TeamsStatus.ps1 +++ b/Get-TeamsStatus.ps1 @@ -1,23 +1,23 @@ <# .NOTES -Name: Get-TeamsStatus.ps1 -Author: Danny de Vries -Requires: PowerShell v2 or higher -Version History: https://github.com/EBOOZ/TeamsStatus/commits/main + Name: Get-TeamsStatus.ps1 + Author: Danny de Vries + Requires: PowerShell v2 or higher + Version History: https://github.com/EBOOZ/TeamsStatus/commits/main .SYNOPSIS -Sets the status of the Microsoft Teams client to Home Assistant. + Sets the status of the Microsoft Teams client to Home Assistant. .DESCRIPTION -This script is monitoring the Teams client logfile for certain changes. It -makes use of two sensors that are created in Home Assistant up front. -sensor.teams_status displays that availability status of your Teams client based -on the icon overlay in the taskbar on Windows. sensor.teams_activity shows if you -are in a call or not based on the App updates deamon, which is paused as soon as -you join a call. + This script is monitoring the Teams client logfile for certain changes. It + makes use of two sensors that are created in Home Assistant up front. + sensor.teams_status displays that availability status of your Teams client based + on the icon overlay in the taskbar on Windows. sensor.teams_activity shows if you + are in a call or not based on the App updates deamon, which is paused as soon as + you join a call. .PARAMETER SetStatus -Run the script with the SetStatus-parameter to set the status of Microsoft Teams -directly from the commandline. + Run the script with the SetStatus-parameter to set the status of Microsoft Teams + directly from the commandline. .EXAMPLE -.\Get-TeamsStatus.ps1 -SetStatus "Offline" + .\Get-TeamsStatus.ps1 -SetStatus "Offline" #> # Configuring parameter for interactive run Param($SetStatus) @@ -45,14 +45,15 @@ If($null -ne $SetStatus){ break } +# Clear the status variable at the start +$CurrentStatus = "" + # Start monitoring the Teams logfile when no parameter is used to run the script DO { # Get Teams Logfile and last icon overlay status $TeamsStatus = Get-Content -Path "C:\Users\$UserName\AppData\Roaming\Microsoft\Teams\logs.txt" -Tail 100 | Select-String -Pattern ` 'Setting the taskbar overlay icon -',` - 'StatusIndicatorStateService: Added',` - 'Main window is closing',` - 'main window closed' | Select-Object -Last 1 + 'StatusIndicatorStateService: Added' | Select-Object -Last 1 # Get Teams Logfile and last app update deamon status $TeamsActivity = Get-Content -Path "C:\Users\$UserName\AppData\Roaming\Microsoft\Teams\logs.txt" -Tail 100 | Select-String -Pattern ` 'Resuming daemon App updates',` @@ -60,38 +61,44 @@ $TeamsActivity = Get-Content -Path "C:\Users\$UserName\AppData\Roaming\Microsoft 'SfB:TeamsNoCall',` 'SfB:TeamsPendingCall',` 'SfB:TeamsActiveCall' | Select-Object -Last 1 +# Get Teams application process +$TeamsProcess = Get-Process -Name Teams -ErrorAction SilentlyContinue -If ($TeamsStatus -like "*Setting the taskbar overlay icon - Available*" -or ` - $TeamsStatus -like "*StatusIndicatorStateService: Added Available*") { - $Status = "Available" - Write-Host $Status -} -ElseIf ($TeamsStatus -like "*Setting the taskbar overlay icon - Busy*" -or ` - $TeamsStatus -like "*StatusIndicatorStateService: Added Busy*" -or ` - $TeamsStatus -like "*Setting the taskbar overlay icon - On the phone*") { - $Status = "Busy" - Write-Host $Status -} -ElseIf ($TeamsStatus -like "*Setting the taskbar overlay icon - Away*" -or ` - $TeamsStatus -like "*StatusIndicatorStateService: Added Away*") { - $Status = "Away" - Write-Host $Status -} -ElseIf ($TeamsStatus -like "*Setting the taskbar overlay icon - Do not disturb *" -or ` - $TeamsStatus -like "*StatusIndicatorStateService: Added DoNotDisturb*" -or ` - $TeamsStatus -like "*Setting the taskbar overlay icon - Focusing*" -or ` - $TeamsStatus -like "*StatusIndicatorStateService: Added Focusing*") { - $Status = "Do not disturb" - Write-Host $Status -} -ElseIf ($TeamsStatus -like "*Setting the taskbar overlay icon - In a meeting*" -or ` - $TeamsStatus -like "*StatusIndicatorStateService: Added InAMeeting*") { - $Status = "In a meeting" - Write-Host $Status +# Check if Teams is running and start monitoring the log if it is +If ($null -ne $TeamsProcess) { + If ($TeamsStatus -like "*Setting the taskbar overlay icon - Available*" -or ` + $TeamsStatus -like "*StatusIndicatorStateService: Added Available*") { + $Status = "Available" + Write-Host $Status + } + ElseIf ($TeamsStatus -like "*Setting the taskbar overlay icon - Busy*" -or ` + $TeamsStatus -like "*StatusIndicatorStateService: Added Busy*" -or ` + $TeamsStatus -like "*Setting the taskbar overlay icon - On the phone*") { + $Status = "Busy" + Write-Host $Status + } + ElseIf ($TeamsStatus -like "*Setting the taskbar overlay icon - Away*" -or ` + $TeamsStatus -like "*StatusIndicatorStateService: Added Away*") { + $Status = "Away" + Write-Host $Status + } + ElseIf ($TeamsStatus -like "*Setting the taskbar overlay icon - Do not disturb *" -or ` + $TeamsStatus -like "*StatusIndicatorStateService: Added DoNotDisturb*" -or ` + $TeamsStatus -like "*Setting the taskbar overlay icon - Focusing*" -or ` + $TeamsStatus -like "*StatusIndicatorStateService: Added Focusing*") { + $Status = "Do not disturb" + Write-Host $Status + } + ElseIf ($TeamsStatus -like "*Setting the taskbar overlay icon - In a meeting*" -or ` + $TeamsStatus -like "*StatusIndicatorStateService: Added InAMeeting*") { + $Status = "In a meeting" + Write-Host $Status + } } -ElseIf ($TeamsStatus -like "*ain window*") { - $Status = "Offline" - Write-Host $Status +# Set status to Offline when the Teams application is not running +Else { + $Status = "Offline" + Write-Host $Status } If ($TeamsActivity -like "*Resuming daemon App updates*" -or `