Denis war sehr nah. Aber die eigentliche Lösung wurde ein wenig getauscht. Da Powershell die CPU nicht über einen bestimmten Zeitraum überprüfen kann, sondern nur über die aktuelle Nutzung, musste die SQL Server-Prüfung verwendet werden.
Mein erster Schritt bestand darin, ein PowerShell-Skript auszuführen, das prüft, ob die aktuelle Systemzeit zwischen den beiden Zeitbeschränkungen liegt. Wenn dies der Fall ist, führt das Powershell-Skript nichts aus. Der SQL Server-Job interpretiert dies als Erfolg.
Anschließend fährt der Job mit dem letzten Schritt fort und führt die Aktualisierungsabfrage durch.
Wenn die aktuelle Zeit jedoch außerhalb des Bereichs liegt, Start-Time -s 600
führe ich a aus, um das Powershell-Skript für 10 Minuten anzuhalten (simuliert die "einmalige Anforderung von 5 bis 10 Minuten"), um zu verhindern, dass der SQL Server-Agent ständig versucht, diesen Job auszuführen .
Nach 10 Minuten gibt das Powershell-Skript einen benutzerdefinierten Fehler aus. Da ich $ErrorActionPreference = "Stop"
am Anfang des Skripts habe, wird das Powershell-Skript nach dem Fehler nicht mehr ausgeführt. Dieser Schritt ist sehr wichtig.
Da Powershell gestoppt wurde und nicht zurückgegeben wurde, interpretiert der SQL Server-Agent dies als Fehler und fährt nicht mit dem Schritt fort, der die Aktualisierungsabfrage ausführt.
PS Ihr habt mich in die richtige Richtung geführt. Wenn ich genug Ruf hätte, würde ich euch positiv bewerten.
Bearbeiten: Powershell-Skript hinzugefügt
$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"
}