beidermachtvongreyscull
Goto Top

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:

$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

Content-Key: 666817

Url: https://administrator.de/contentid/666817

Printed on: April 16, 2024 at 19:04 o'clock

Member: Looser27
Looser27 May 18, 2021 at 07:07:21 (UTC)
Goto Top
Moin,

wird das Skript durch Veeam mit den entsprechenden Berechtigungen ausgeführt?
Hast Du mal die Dienste von veeam zum Test mit nem Admin-Account laufen lassen?


Gruß

Looser
Member: beidermachtvongreyscull
beidermachtvongreyscull May 18, 2021 at 07:37:13 (UTC)
Goto Top
Moin,

wird das Skript durch Veeam mit den entsprechenden Berechtigungen ausgeführt?
Da im Systemkontext, hat es auf der VM höchste Rechte. Die Zeilen 7 und 8 bewirken, dass der Befehl via PSRemoting mit Zugangsdaten eines Domänenadmins aufgeführt werden, die dem Systemkonto verschlüsselt im credfile.xml vorliegen.
Das ist getestet und funktioniert.

Hast Du mal die Dienste von veeam zum Test mit nem Admin-Account laufen lassen?
Ich sah diese Änderung nicht als erforderlich an.

Gruß
bdmvg
Member: Looser27
Solution Looser27 May 18, 2021 at 07:40:06 (UTC)
Goto Top
Der Kollege @148121 hat hier Recht. Es liegt wohl an Deiner Zeitdefinition.
Mitglied: 148121
Solution 148121 May 18, 2021 updated at 07:41:57 (UTC)
Goto Top
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) {
Gruß w.
Member: Looser27
Looser27 May 18, 2021 at 07:43:39 (UTC)
Goto Top
Zitat von @148121:

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) {
> 
Gruß w.

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.
Mitglied: 148121
Solution 148121 May 18, 2021 updated at 07:47:36 (UTC)
Goto Top
Zitat von @Looser27:

Zitat von @148121:

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) {
>> 
Gruß w.

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 😉 ...
Member: beidermachtvongreyscull
beidermachtvongreyscull May 18, 2021 updated at 08:43:12 (UTC)
Goto Top
Hey,

hab vielen Dank für die Augenöffner.
Ich hatte auf Basis Deines ersten Kommentars bereits das Script dahingehend alterniert:

$min = Get-Date '23:00'  
$max = Get-Date '02:50'  
$max = $max.AddDays(1)

$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
}

Aber auf Basis Deines jetzigen Kommentars habe ich die IF-Abfrage angepasst.
Auf den Timespan bin ich nicht gekommen.

Herzlichen Dank und Grüße

bdmvg