Add periodic deploy task installer and docs for rarely rebooted servers
This commit is contained in:
@@ -122,6 +122,32 @@ schtasks /Query /TN "RDP-Login-Monitor-Watchdog"
|
||||
- `RDP-Login-Monitor-Watchdog`
|
||||
- Поэтому после фактического запуска deploy монитор и watchdog стартуют сразу.
|
||||
|
||||
### Серверы без перезагрузок: периодический Deploy
|
||||
|
||||
Если сервер перезагружается редко, одного Startup-сценария недостаточно для своевременного обновления. В этом случае добавьте отдельную задачу, которая периодически запускает `Deploy-LoginMonitor.ps1` с шары.
|
||||
|
||||
Готовый скрипт в репозитории:
|
||||
|
||||
- `Install-DeployScheduledTask.ps1`
|
||||
|
||||
Пример (каждые 60 минут и сразу запустить):
|
||||
|
||||
```powershell
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File ".\Install-DeployScheduledTask.ps1" `
|
||||
-TaskName "RDP-Login-Monitor-Deploy" `
|
||||
-DeployScriptPath "\\B26\NETLOGON\RDP-login-monitor\Deploy-LoginMonitor.ps1" `
|
||||
-RepeatMinutes 60 `
|
||||
-RunNow
|
||||
```
|
||||
|
||||
Проверка:
|
||||
|
||||
```powershell
|
||||
schtasks /Query /TN "RDP-Login-Monitor-Deploy" /V /FO LIST
|
||||
```
|
||||
|
||||
Важно: эта задача отвечает только за доставку обновлений (через `version.txt`). За «живость» процесса по-прежнему отвечает `RDP-Login-Monitor-Watchdog`.
|
||||
|
||||
### Диагностика GPO/Startup
|
||||
|
||||
- События применения политики и startup-сценариев:
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#Requires -RunAsAdministrator
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$TaskName = "RDP-Login-Monitor-Deploy",
|
||||
[string]$DeployScriptPath = "\\B26\NETLOGON\RDP-login-monitor\Deploy-LoginMonitor.ps1",
|
||||
[ValidateRange(5, 1440)][int]$RepeatMinutes = 60,
|
||||
[switch]$RunNow
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($DeployScriptPath)) {
|
||||
throw "DeployScriptPath не задан."
|
||||
}
|
||||
|
||||
$psExe = "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe"
|
||||
if (-not (Test-Path -LiteralPath $psExe)) {
|
||||
throw "Не найден powershell.exe по пути: $psExe"
|
||||
}
|
||||
|
||||
$taskCmd = "`"$psExe`" -NoProfile -ExecutionPolicy Bypass -File `"$DeployScriptPath`""
|
||||
$schtasksExe = Join-Path $env:SystemRoot "System32\schtasks.exe"
|
||||
|
||||
Write-Host "Создаю/обновляю задачу: $TaskName" -ForegroundColor Cyan
|
||||
Write-Host "Команда: $taskCmd" -ForegroundColor DarkGray
|
||||
Write-Host "Периодичность: каждые $RepeatMinutes мин." -ForegroundColor DarkGray
|
||||
|
||||
& $schtasksExe /Create /F /TN $TaskName /RU SYSTEM /RL HIGHEST /SC MINUTE /MO $RepeatMinutes /TR $taskCmd | Out-Host
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "schtasks /Create вернул код $LASTEXITCODE"
|
||||
}
|
||||
|
||||
Write-Host "Задача создана/обновлена: $TaskName" -ForegroundColor Green
|
||||
|
||||
if ($RunNow) {
|
||||
Write-Host "Запускаю задачу немедленно..." -ForegroundColor Cyan
|
||||
& $schtasksExe /Run /TN $TaskName | Out-Host
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "schtasks /Run вернул код $LASTEXITCODE"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Готово." -ForegroundColor Green
|
||||
Reference in New Issue
Block a user