Denis era molto vicino. Ma la soluzione effettiva è stata leggermente scambiata. Poiché PowerShell non può controllare la CPU per un periodo di tempo, è necessario utilizzare solo il controllo di SQL Server.
Quindi il mio primo passo del lavoro è stato quello di eseguire uno script PowerShell che controlla se l'ora di sistema corrente è tra i due vincoli temporali. Se lo è, lo script PowerShell non fa nulla. Il processo di SQL Server lo interpreta come un successo.
Quindi il lavoro passa all'ultimo passaggio ed esegue la query di aggiornamento.
Se tuttavia, l'ora corrente è al di fuori dell'intervallo, Start-Time -s 600
eseguo una pausa per lo script PowerShell per 10 minuti (simulando il requisito "una volta ogni 5-10 minuti). Questo per impedire all'agente del server SQL di provare costantemente a eseguire questo lavoro .
Dopo 10 minuti, lo script PowerShell genera un errore personalizzato. Da quando ho $ErrorActionPreference = "Stop"
all'inizio dello script, lo script PowerShell si interrompe dopo l'errore. Questo passaggio è molto importante.
Poiché PowerShell si è arrestato e non è tornato, SQL Server Agent lo interpreta come un errore e non proseguirà nel passaggio che esegue la query di aggiornamento.
PS Ragazzi, mi avete guidato nella giusta direzione. Se avessi abbastanza reputazione, voterei voi ragazzi.
Modifica: aggiunto Powershell Script
$ErrorActionPreference = "Stop"
$StartTime = Get-Date "12:00 AM"
$EndDate = Get-Date "05:00 AM"
$CurrentDate = Get-Date
$ExecuteJob = $StartTime -lt $CurrentDate -and $EndDate -gt $CurrentDate
if(!$ExecuteJob){
Start-Sleep -s 600
throw "Current Time not within Server downtime"
}