67 lines
2.4 KiB
PowerShell
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)
|
|
}
|