Hallo ROBudus,
viele von euch fragen sich vielleicht, ob und wie sie unsere Paketdepot-Pakete als Vorlage für eigene Projekte nutzen können. Die gute Nachricht: Ja, das ist ausdrücklich erlaubt! Ihr könnt entweder einzelne Skriptzeilen herauskopieren und in eure eigenen Skripte integrieren oder das gesamte Paket als Grundlage nehmen und anpassen.
Nehmen wir als Beispiel den Oracle Client: Bevor ihr loslegt, lohnt es sich zu prüfen, ob die Installationslogik der Version 19 mit der der Version 21 identisch ist. Falls ja, könnt ihr einfach das bestehende Paket für die 21er-Version kopieren. Ändert dann den Ordnernamen, um die neue Version widerzuspiegeln, und passt in der neo42PackageConfig.json die Versionsnummer, das Datum, den Autor und andere Metadaten an. Im Files-Ordner tauscht ihr anschließend die Installationsdateien aus und testet, ob alles wie gewünscht funktioniert.
Ein wichtiger Punkt bei vielen Paketen ist das Entpacken von Dateien. Hier setzen wir in der Regel auf das PowerShell-Cmdlet Expand-Archive, das eigentlich ein einfacher Einzeiler ist. Um jedoch sicherzustellen, dass alles sauber abläuft, bauen wir etwas Logik drumherum. So löschen wir beispielsweise vor dem Entpacken den Zielordner, um sicherzugehen, dass keine alten Dateien übrig bleiben. Nach dem Entpacken prüfen wir, ob der Vorgang erfolgreich war.
Ein einfaches Beispiel, das ihr euch als PowerShell-Snippet im Package Recorder hinterlegen könnt, sieht so aus:
Remove-Folder "$envSystemdrive\TempInstFolder"
Expand-Archive -Path "$dirFiles\NT_213000_client.zip" -DestinationPath "$envSystemdrive\TempInstFolder"
if ( ($LASTEXITCODE -ne 0) -or ($false -eq (Test-Path -Path "$envSystemdrive\TempInstFolder")) ) {
Exit-NxtScriptWithError -ErrorMessage "Unzip of installation files in temporary folder '$envSystemdrive\TempInstFolder' failed!" -ErrorMessagePSADT $($Error[0].Exception.Message) -MainExitCode $LASTEXITCODE
}
Zuerst wird der temporäre Ordner gelöscht, dann die ZIP-Datei entpackt und anschließend geprüft, ob alles geklappt hat. Sollte etwas schiefgehen, wird eine Fehlermeldung ausgegeben. Und vergiss nicht: Am Ende des Skripts solltet ihr den temporären Ordner wieder bereinigen.
Remove-Folder "$envSystemdrive\TempInstFolder"
Für mehr Sicherheit und Flexibilität arbeiten wir in einigen Paketen mit New-NxtTemporaryFolder. Dieses Cmdlet erstellt bei jeder Ausführung einen zufällig generierten temporären Ordner mit eingeschränkten Zugriffsrechten. Das macht das Skript aber etwas komplexer, da ihr den Pfad des neuen Ordners in einer Variable speichern und bei allen Pfadangaben entsprechend ersetzen müsst.