Guten Tag,
ich möchte eine Software verteilen, deren Sources sich nicht im OPSI_Depot befinden. Die Quelldateien für die Installation befinden sich im Netzwerk.
Nun startet OPSI die Installation ja mit der lokalen Ressource, die auf den Netzwerkpfad keinen Zugriff hat.
Lässt sich irgendwie steuern, dass Setup-Script Zugriffsrecht auf eine Netzwerkfreigabe erhält?
Wie würdet Ihr einen Netzwerkzugriff dieser Art steuern?
Danke und Gruß
Software aus Netzwerk installieren
Re: Software aus Netzwerk installieren
Hallo Oliver,
für Deine Anforderung musste ich letztes Jahr eine Lösung finden und habe es so gemacht:
Kurz: Das winst-Install-Skript verbindet die Freigabe (1), installiert das Programm (2) und trennt danach die Freigabe wieder (3).
Lang: Die benötigten Daten sind als Produkt-Properties hinterlegt:
(1) Per DosInAnIcon-Sekundärsektion wird die Freigabe verbunden:
(2) Nun findet die eigentliche Installation statt...
(3) Am Schluss wird per DosInAnIcon-Sekundärsektion die Freigabe wieder getrennt:
Ganz lang: Alternativ kann auch der Benutzer aus dem opsi-Produkt windomain benutzt werden - das macht es einfacher, denn die Daten müssen in Zukunft nur in einem einzigen opsi-Produkt gepflegt werden.
Die Produkt-Properties des opsi-Produkts windomain können per OpsiServiceCall-Sekundärsektion auslesen werden.
Hier werden die Werte für $PROP_Freigabe_Benutzer$ und $PROP_Freigabe_Passwort$ betankt.
Es geht bestimmt einfacher. Lokale Funktionen wären hier sicherlich auch von Vorteil.
Vorsicht Falle: Beachte beim interaktiven Testen (https://download.uib.de/opsi4.1/documen ... est-script) bitte, dass der OpsiServiceCall-Aufruf nicht funktioniert. Die Verbindung muss zunächst initialisiert werden.
Zum Testen musst Du das vorher ausführen:
Ich hoffe das hilft Dir weiter.
Viele Grüße
Martin
für Deine Anforderung musste ich letztes Jahr eine Lösung finden und habe es so gemacht:
Kurz: Das winst-Install-Skript verbindet die Freigabe (1), installiert das Programm (2) und trennt danach die Freigabe wieder (3).
Lang: Die benötigten Daten sind als Produkt-Properties hinterlegt:
- - Freigabepfad (Freigabe)
- Benutzername (Freigabe_Benutzer)
- Passwort (Freigabe_Passwort)
Code: Alles auswählen
DefVar $PROP_Freigabe$
DefVar $PROP_Freigabe_Benutzer$
DefVar $PROP_Freigabe_Passwort$
Set $PROP_Freigabe$ = GetProductProperty("Freigabe","\\server\Programme-S")
Set $PROP_Freigabe_Benutzer$ = GetProductProperty("Freigabe_Benutzer","")
Set $PROP_Freigabe_Passwort$ = GetProductProperty("Freigabe_Passwort","")
Code: Alles auswählen
DefVar "$PROP_Freigabe$"
Set "$PROP_Freigabe$" = "\Server\Freigabe"
DosInAnIcon_MountShare "$PROP_Freigabe$" "$PROP_Freigabe_Benutzer$" "$PROP_Freigabe_Passwort$"
[DosInAnIcon_MountShare]
; Parameter1: Freigabepfad
; Parameter2: Benutzername
; Parameter3: Kennwort
NET USE * %1 %3 /USER:%2 /PERSISTENT:NO
exit %ERRORLEVEL%
(3) Am Schluss wird per DosInAnIcon-Sekundärsektion die Freigabe wieder getrennt:
Code: Alles auswählen
DosInAnIcon_UnMountShare "$PROP_Freigabe$"
[DosInAnIcon_UnMountShare]
; funktioniert nur, wenn ein Buchstabe zugewiesen wurde.
@echo off
set drive=leer
for /f "tokens=2,3" %%a in ('net use') do if "%%b"==%1 set drive=%%a
if "%drive%"=="leer" Goto WEITER
echo Freigabe ist gemappt auf Laufwerk %drive%
echo Trenne Freigabe...
NET USE %drive% /DELETE
exit %ERRORLEVEL%
:WEITER
echo Freigabe ist nicht gemappt.
exit %ERRORLEVEL%
Die Produkt-Properties des opsi-Produkts windomain können per OpsiServiceCall-Sekundärsektion auslesen werden.
Hier werden die Werte für $PROP_Freigabe_Benutzer$ und $PROP_Freigabe_Passwort$ betankt.
Es geht bestimmt einfacher. Lokale Funktionen wären hier sicherlich auch von Vorteil.
Code: Alles auswählen
DefStringlist $resultlist$
DefVar $ArrayStr$
DefVar $PROP_Freigabe_Benutzer$
DefVar $PROP_Freigabe_Passwort$
Sub_User_und_Passwort_aus_Produkt_windomain_ermitteln
[Sub_User_und_Passwort_aus_Produkt_windomain_ermitteln]
set $resultlist$ = getReturnListFromSection("opsiservicecall_get_windomain_properties")
Set $ArrayStr$ = takestring(0, $resultlist$)
if not(jsonIsValid($ArrayStr$))
LogError "got no valid json from Service"
isFatalError
endif
; Username aus dem Produkt 'windomain' ermitteln - nicht elegant, aber funktionsfähig
set $resultlist$ = emptylist($resultlist$)
set $resultlist$ = jsonAsArrayToStringList($ArrayStr$)
Set $PROP_Freigabe_Benutzer$ = takeFirstStringContaining($resultlist$ , '"propertyId":"username"')
set $resultlist$ = emptylist($resultlist$)
Set $resultlist$ = splitString($PROP_Freigabe_Benutzer$, ',"values":["')
if not(count($resultlist$) = "2")
isFatalError "Fehler beim Ermittlen von 'username' aus dem Produkt 'windomain'. Bitte tragen Sie den Benutzer in das Property 'freigabe_benutzer' ein."
endif
Set $PROP_Freigabe_Benutzer$ = takeString (1, $resultlist$)
Set $resultlist$ = splitString($PROP_Freigabe_Benutzer$, '"')
Set $PROP_Freigabe_Benutzer$ = takeString (0, $resultlist$)
if not(strLength($PROP_Freigabe_Benutzer$) > "0")
isFatalError "Fehler beim Ermittlen von 'username' aus dem Produkt 'windomain'. Bitte tragen Sie den Benutzer in das Property 'freigabe_benutzer' ein."
endif
; Passwort aus dem Produkt 'windomain' ermitteln - nicht elegant, aber funktionsfähig
set $resultlist$ = emptylist($resultlist$)
set $resultlist$ = jsonAsArrayToStringList($ArrayStr$)
Set $PROP_Freigabe_Passwort$ = takeFirstStringContaining($resultlist$ , '"propertyId":"password"')
set $resultlist$ = emptylist($resultlist$)
Set $resultlist$ = splitString($PROP_Freigabe_Passwort$, ',"values":["')
if not(count($resultlist$) = "2")
isFatalError "Fehler beim Ermittlen von 'password' aus dem Produkt 'windomain'. Bitte tragen Sie das Passwort in das Property 'freigabe_passwort' ein."
endif
Set $PROP_Freigabe_Passwort$ = takeString (1, $resultlist$)
Set $resultlist$ = splitString($PROP_Freigabe_Passwort$, '"')
Set $PROP_Freigabe_Passwort$ = takeString (0, $resultlist$)
if not(strLength($PROP_Freigabe_Passwort$) > "0")
isFatalError "Fehler beim Ermittlen von 'password' aus dem Produkt 'windomain'. Bitte tragen Sie das Passwort in das Property 'freigabe_passwort' ein."
endif
[opsiservicecall_get_windomain_properties]
"method": "productPropertyState_getObjects"
"params":[
"[]",
'{"productId":"windomain"}'
]
Zum Testen musst Du das vorher ausführen:
Code: Alles auswählen
DefVar $Service_User$
DefVar $Service_PWD$
DefVar $Sevice_URL$
; Die Werte findet man in der Datei "opsiclientd.conf"
Set $Service_User$ = "host_id"
Set $Service_PWD$ = "opsi_host_key"
; In der Url die Endung "/rpc" entfernen
Set $Sevice_URL$ = "config_service"
opsiservicecall_testaufruf /username "$Service_User$" /password "$Service_PWD$" /serviceurl "$Sevice_URL$"
[opsiservicecall_testaufruf]
"method": "accessControl_authenticated"
"params":[
]
Viele Grüße
Martin
Re: Software aus Netzwerk installieren
+1 für die Lösung von Martin! Habe ich auch schon so gemacht, als wir einige Zeit MS Patche von einem zentralen Share verteilt haben.
Wer mir einen Kaffee spendieren mag , bitte gerne!
opsi PackageBuilder - Python Edition
opsibian-gen - RaspberryPi Image Generator mit opsi 4.1
Winst32 Preprocessor
opsi PackageBuilder - Python Edition
opsibian-gen - RaspberryPi Image Generator mit opsi 4.1
Winst32 Preprocessor