Veeam Pre-Job Powershell-Script wird nicht korrekt ausgeführt
Guten Morgen Kollegen,
kurz zum Aufbau meiner Infrastruktur:
Homogener Hyper-V-Cluster basierend auf Windows Server 2016 DC.
Der Backupserver (Veeam) ist eine VM und sichert u.a. den Cluster auf eine USB-Festplatte, die am einzigen physischen Domain Controller hängt.
Das hat bisher immer so funktioniert:
- Um 19 Uhr löschte ein Powershell-Script auf dem Domänencontroller die Platte.
- Um 0 Uhr startete der Veeam-Job.
Jetzt wollte ich das Ganze etwas mehr dynamischer machen und habe das Powershellscript auf dem DC deaktiviert und in folgender Form an den Job gebunden, so dass es vor dem Job ablaufen sollte:
Da der Job bis zu dreimal am Tag laufen kann, wollte ich sicherstellen, dass er die Platte nur in einem bestimmten Zeitfenster löscht.
Ich habe deswegen das Zeitfenster etwas großzügiger gestaltet, um Startverschiebungen des Jobs einfangen zu können.
Die Veeam-Dienste auf der VM laufen im local system context. Ich habe extra mit psexec die Scriptzeilen
getestet. Das funktioniert. Der Credential file wird sauber verwendet, die Platte danach gelöscht.
Aber ich finde derzeit nicht heraus, warum das Script nicht in Veeam zum Erfolg führt, obwohl laut Log Gegenteiliges der Fall ist:
Hat jemand von Euch eine zielführende Idee?
Vielen Dank für jeglichen Versuch der Hilfe und viele Grüße
bdmvg
kurz zum Aufbau meiner Infrastruktur:
Homogener Hyper-V-Cluster basierend auf Windows Server 2016 DC.
Der Backupserver (Veeam) ist eine VM und sichert u.a. den Cluster auf eine USB-Festplatte, die am einzigen physischen Domain Controller hängt.
Das hat bisher immer so funktioniert:
- Um 19 Uhr löschte ein Powershell-Script auf dem Domänencontroller die Platte.
- Um 0 Uhr startete der Veeam-Job.
Jetzt wollte ich das Ganze etwas mehr dynamischer machen und habe das Powershellscript auf dem DC deaktiviert und in folgender Form an den Job gebunden, so dass es vor dem Job ablaufen sollte:
$min = Get-Date '23:00'
$max = Get-Date '02:50'
$now = Get-Date
if ($min.TimeOfDay -le $now.TimeOfDay -and $max.TimeOfDay -ge $now.TimeOfDay) {
$cred=Import-Clixml C:\credfile.xml
Invoke-Command -ScriptBlock {Format-Volume -DriveLetter D -FileSystem ReFS -NewFileSystemLabel DASI} -ComputerName dc1 -Credential $cred
}
Da der Job bis zu dreimal am Tag laufen kann, wollte ich sicherstellen, dass er die Platte nur in einem bestimmten Zeitfenster löscht.
Ich habe deswegen das Zeitfenster etwas großzügiger gestaltet, um Startverschiebungen des Jobs einfangen zu können.
Die Veeam-Dienste auf der VM laufen im local system context. Ich habe extra mit psexec die Scriptzeilen
$cred=Import-Clixml C:\credfile.xml
Invoke-Command -ScriptBlock {Format-Volume -DriveLetter D -FileSystem ReFS -NewFileSystemLabel DASI} -ComputerName dc1 -Credential $cred
getestet. Das funktioniert. Der Credential file wird sauber verwendet, die Platte danach gelöscht.
Aber ich finde derzeit nicht heraus, warum das Script nicht in Veeam zum Erfolg führt, obwohl laut Log Gegenteiliges der Fall ist:
[18.05.2021 00:00:12] <01> Info Running pre-job script
[18.05.2021 00:00:12] <01> Info Executing custom command [powershell.exe], arguments [ -ExecutionPolicy ByPass -Command " try {& 'C:\Platte_auf_DC1_formatieren.ps1' -ErrorAction Stop } catch { exit 1 } "]
[18.05.2021 00:00:16] <01> Info Pre-job script completed successfully
Hat jemand von Euch eine zielführende Idee?
Vielen Dank für jeglichen Versuch der Hilfe und viele Grüße
bdmvg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 666817
Url: https://administrator.de/contentid/666817
Ausgedruckt am: 23.11.2024 um 07:11 Uhr
7 Kommentare
Neuester Kommentar
Die IF Abfrage ist fehlerhaft, somit auch keine Aktion. Mach aus dem -and ein -or ...
Gruß w.
if ($min.TimeOfDay -le $now.TimeOfDay -or $max.TimeOfDay -ge $now.TimeOfDay) {
Zitat von @148121:
Die IF Abfrage ist fehlerhaft, somit auch keine Aktion. Mach aus dem -and ein -or ...
Gruß w.
Die IF Abfrage ist fehlerhaft, somit auch keine Aktion. Mach aus dem -and ein -or ...
> if ($min.TimeOfDay -le $now.TimeOfDay -or $max.TimeOfDay -ge $now.TimeOfDay) {
>
Dann würde das Skript aber jedesmal greifen. Er will, so habe ich es verstanden, das Skript aber nur 1x täglich laufen haben, nämlich zwischen 23:00 und 02:50.
Zitat von @Looser27:
Dann würde das Skript aber jedesmal greifen. Er will, so habe ich es verstanden, das Skript aber nur 1x täglich laufen haben, nämlich zwischen 23:00 und 02:50.
Nein, es greift deswegen nur zwischen 23:00 und 2:50 weil er den TimeOfDay Timespan benutzt nicht das Datum an sich 😉 ...Zitat von @148121:
Die IF Abfrage ist fehlerhaft, somit auch keine Aktion. Mach aus dem -and ein -or ...
Gruß w.
Die IF Abfrage ist fehlerhaft, somit auch keine Aktion. Mach aus dem -and ein -or ...
>> if ($min.TimeOfDay -le $now.TimeOfDay -or $max.TimeOfDay -ge $now.TimeOfDay) {
>>
Dann würde das Skript aber jedesmal greifen. Er will, so habe ich es verstanden, das Skript aber nur 1x täglich laufen haben, nämlich zwischen 23:00 und 02:50.