fix(worktime): isolate global session collector and reset RDP bridge flow
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json',
|
||||
[string]$ModulePath = 'C:\Program Files\AWatch-rus\windows\ActivityWatch.Windows.Common.psm1'
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
Import-Module $ModulePath -Force
|
||||
|
||||
$config = Read-ActivityWatchDeploymentConfig -Path $ConfigPath
|
||||
$launchScript = [string]$config.paths.launchScript
|
||||
$recoveryScript = [string]$config.paths.recoveryScript
|
||||
$sessionCollectorScript = if ($config.paths.PSObject.Properties.Name -contains 'sessionCollectorScript') {
|
||||
[string]$config.paths.sessionCollectorScript
|
||||
} else {
|
||||
Join-Path ([string]$config.paths.stateRoot) 'worktime-session-collector.ps1'
|
||||
}
|
||||
$taskDefinitions = @($config.userTasks)
|
||||
$recoveryTaskName = [string]$config.recovery.taskName
|
||||
|
||||
$collectorProcs = @(
|
||||
Get-CimInstance Win32_Process -ErrorAction SilentlyContinue |
|
||||
Where-Object {
|
||||
($_.Name -ieq 'powershell.exe' -or $_.Name -ieq 'pwsh.exe') -and
|
||||
$_.CommandLine -and
|
||||
$_.CommandLine -match [Regex]::Escape($sessionCollectorScript)
|
||||
}
|
||||
)
|
||||
|
||||
foreach ($proc in $collectorProcs) {
|
||||
try {
|
||||
Stop-Process -Id ([int]$proc.ProcessId) -Force -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
}
|
||||
}
|
||||
|
||||
Start-Sleep -Seconds 2
|
||||
|
||||
Write-ActivityWatchLaunchScript -Path $launchScript -ConfigPath $ConfigPath
|
||||
Write-ActivityWatchRecoveryScript -Path $recoveryScript -ConfigPath $ConfigPath
|
||||
Register-ActivityWatchUserTasks -TaskDefinitions $taskDefinitions -LaunchScriptPath $launchScript -ConfigPath $ConfigPath
|
||||
Register-ActivityWatchRecoveryTask -TaskName $recoveryTaskName -RecoveryScriptPath $recoveryScript -ConfigPath $ConfigPath
|
||||
Start-ActivityWatchTasks -TaskDefinitions $taskDefinitions -RecoveryTaskName $recoveryTaskName
|
||||
|
||||
Start-Sleep -Seconds 3
|
||||
|
||||
$running = @(
|
||||
Get-CimInstance Win32_Process -ErrorAction SilentlyContinue |
|
||||
Where-Object {
|
||||
($_.Name -ieq 'powershell.exe' -or $_.Name -ieq 'pwsh.exe') -and
|
||||
$_.CommandLine -and
|
||||
$_.CommandLine -match [Regex]::Escape($sessionCollectorScript)
|
||||
} |
|
||||
Select-Object Name, ProcessId, SessionId, CommandLine
|
||||
)
|
||||
|
||||
[pscustomobject]@{
|
||||
rebuiltAtUtc = (Get-Date).ToUniversalTime().ToString('o')
|
||||
launchScript = $launchScript
|
||||
recoveryScript = $recoveryScript
|
||||
sessionCollectorScript = $sessionCollectorScript
|
||||
runningSessionCollectors = @($running)
|
||||
}
|
||||
Reference in New Issue
Block a user