Moin,
wir verwenden eine VPN-Software, die nicht von neo42 im Depot bereitgestellt wird. Aus diesem Grund möchten wir diese selbst paketieren. Nun haben wir uns überlegt, wie wir vorab prüfen können, ob eine aktuelle VPN-Verbindung besteht.
Hierfür verwende ich folgenden Befehl:
$vpnConnection = (Get-NetAdapter | Where-Object {$_.Status -eq "Up" -and $_.InterfaceDescription -like "*VPN*"}).InterfaceDescription
if ($vpnConnection) {
Write-Host "VPN ist aktiv, Update unterbrochen. $vpnConnection"
*Abbruch*
}
Diese Abfrage würde ich in der CustomBegin-Phase einfügen.
Mir ist leider nicht ganz klar, wie der Befehl für eine kontrollierte Skriptbeendigung in diesem Fall aussehen müsste. Wir verwenden Empirum für die Paketverteilung.
Im Handbuch „Paket-Erstellung mit PSADT und neo42-Extensions“ habe ich bereits den Abschnitt „Skriptbeendigung, Verhalten im Fehlerfall und Reboot-Behandlung“ gelesen. Allerdings tue ich mir mit der Umsetzung schwer.
Hat vielleicht schon jemand einen kontrollierten Skriptabbruch umgesetzt, nicht für das Ergebnis einer Installation, sondern eher für eine Vorprüfung?
Grüße
Hallo @hartmann ,
versuche es mal hiermit:
if ($vpnConnection) {
Exit-NxtScriptWithError -ErrorMessage "VPN ist aktiv, Update unterbrochen. $vpnConnection" -MainExitCode "69001"
}
2 „Gefällt mir“
Hallo,
hierzu habe ich noch eine weiterführende Frage:
Wenn ich ein Skript erfolgreich beenden möchte, sollte ich dann den Befehl Exit-NxtScriptWithError mit einem MainExitCode nutzen, der in der neo42PackageConfig.json unter AcceptedInstallExitCodes bzw. AcceptedUninstallExitCodes hinterlegt ist?
Oder ist in diesem Fall Exit-Script sinnvoller?
Anwendungsbeispiel: Wir verteilen einen Intel-Grafiktreiber. Bei einer geringen Anzahl von PCs ist eine zusätzliche Grafikkarte verbaut, was dazu führt, dass die Installation (auch manuell) fehlschlägt. Ich möchte nun vor der Installation prüfen, ob eine weitere Grafikkarte vorhanden ist und das Skript in diesem Fall sauber als „erfolgreich“ beenden.
Gruß
Meikel
Hallo Meikel,
nein das CMDlet ‘Exit-NXTScriptWithError’ kann dazu nicht verwendet werden, da dies immer einen Scriptabbruch zur Folge hat (mit Rückmeldung einer fehlerhaften Scriptausführung). In dem Fall wird das Paket eben auch nicht registriert und würde vom Verteilsystem erneut angestoßen werden!
Ein simpler bedingter Aufruf von Exit-Script bewirkt zwar ein “Ende” der Paketausführung, hat aber auch zur Folge, dass das Paket nicht registriert würde, weil diese Schritte in diesem Fall nicht ausgeführt werden würden (letztlich das gleiche Ergebnis wie oben → erneuter Verteilversuch!).
Unglücklicherweise ist dieser Fall eines vorzeitigen erfolgreichen Scriptendes tatsächlich explizit derzeit so konkret nicht implementiert.
Grundsätzlich kann nur folgender Codeblock eingebunden werden (alle relevanten Schritte zum korrekten Abschluß eines Paketes mit passenden Loggingphasen) - am sinnvollsten in die Custom-Funktion “CustomInstallAndReinstallAndSoftMigrationBegin“ zu hinterlegen:
## exit script processing if condition is met
if ( $true -eq <GraphicsCard_detected> ) {
[string]$script:installPhase = 'Package-Completion'
[PSADTNXT.NxtRebootResult]$rebootRequirementResult = Get-NxtRebootRequirement
Complete-NxtPackageInstallation
[string]$script:installPhase = 'Package-Registration'
Register-NxtPackage -MainExitCode $rebootRequirementResult.MainExitCode -LastErrorMessage $returnErrorMessage -SoftMigrationOccurred $false
[string]$script:installPhase = 'Package-Finish'
[PSADTNXT.NxtRebootResult]$rebootRequirementResult = Set-NxtRebootVariable
Clear-NxtTempFolder
Unblock-NxtAppExecution
CustomEnd
Exit-Script -ExitCode $rebootRequirementResult.MainExitCode
}
Grundsätzlich wäre auch eine Ausführung direkt in “CustomBegin” möglich, dann muss die Ausführung aber zwingend nur für den Installations- und Repairfall eingeschränkt werden!
Alternativ könnte man den Scriptcode insgesamt sonst nur so gestalten, dass in dem gewünschten Fall nichts weiter ausgeführt bzw. übersprungen wird (auch keine integrierten Standardaktionen → InstallMethod muss dazu auf ‘None’ stehen, kein UninstallKey und keine DisplayVersion darf gesetzt sein bzw. müßte geleert werden, was ggf. am Ende irritierend sein könnte) … aber das würde alles ggf. aber auch sehr komplex in der Umsetzung machen!
Gruß René.