Files
AWatch-rus/windows/rebuild-worktime-tasks.ps1
T

67 lines
2.4 KiB
PowerShell

[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)
}