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:
- - 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","")
(1) Per
DosInAnIcon-Sekundärsektion wird die Freigabe verbunden:
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%
(2) Nun findet die eigentliche
Installation statt...
(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%
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.
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"}'
]
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:
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":[
]
Ich hoffe das hilft Dir weiter.
Viele Grüße
Martin