Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

G23
Posts: 79
Joined: 20. Jan 2021, 17:08
Contact:

Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by G23 » 26. Jun 2023, 16:36

Guten Tag,

Situation:
wenn ich die BAT-Datei auf dem Client mit Administratorrechten ausführe, wird diese installiert. Wenn ich diese via Matrix42 ausführen lasse, wird diese laut Log erfolgreich installiert, aber die Software ist nicht vorhanden.

Vorgabe:
Ich habe ein Softwarepaket, welches eigentlich eine Microsoft Store App ist, vom Hersteller wird als Alternative ein Download mit Powershell Verteilungsscripts angeboten. Ich habe eine BATCH Datei welche die Installation ohne Probleme auf einen Client ausführt. Was würdet ihr machen um die Situation sauber zu lösen? Ich hatte versucht den Inhalt direkt über die Setup.inf zu lösen, jedoch muss folgendes abgearbeitet werden.

1. Windows Developer Modus aktivieren
2. Zertifikat installieren
3. Powershell ausführen (welches ein weiteres Powershell ausführt)
4. Nach der Installation den Windows Developer Modus deaktivieren

Install.BAT

Code: Select all

REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
certutil -addstore -user TrustedPeople .\Install.cer
powershell.exe -executionpolicy bypass -file "%~dpn0.ps1" -force
timeout 30 > nul pause
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "0"
Wenn ich dieses Script jedoch via Matrix42 ausführen lasse, läuft die Installation, laut Log erfolgreich durch, jedoch wird die Software nicht erfolgreich installiert.

Setup.inf

Code: Select all

[SetupInfo]
Author                  = Autorname
CreationDate            = 15.06.2023
InventoryID             =
Description             = Produkt AG - Produkt
Method                  = scripted
Tested on               = Win10
Dependencies            = 
Command line options    = /S2 /AW
Last Change             = 22.06.2023 14:07
Build                   = 

;[VarDefInfo]
; <Variable>, <Type: 0=Computer 1=User>, <Allow NULL values: 0=No 1=Yes>

[Setup]
Version=15.0
ShowCaption=1
BlockInput=0
Platform=*

[Requirements]

[Application]
ProductName=Produkt
DeveloperName=Produkt AG
Version=1.0
Revision=0
SetupName=%ProductName% %Version% %SetupWizard%
Text1="%ProductName% %Version%",         Arial,           30, , 000000, 4,    , LEFT BOLD ITALIC 
Text2="%DeveloperName%",                 Arial,           24, , 000000, 4,    , LEFT BOLD ITALIC
Text8="%Company%",                       Arial,           18, , 000000, 4,  10, RIGHT BOLD ITALIC
Text9="%InstallationFor% %WindowsUser%", Arial,           16, , 000000, 4, -18, BOTTOM ITALIC LEFT
BackgroundColor=00B6FF,FFFFFF
CopyDialogRect=0%, 77%, 100%, 100%, HCENTER


; Register all installations in common registry key
UserKeyName=%DeveloperName%\%ProductName%
MachineKeyName=%DeveloperName%\%ProductName%\%Version%
UninstallKeyName=%DeveloperName% %ProductName% %Version%
UninstallDisplayName=%ProductName% %Version%
UninstallString=%ReinstallString% /U
ReinstallString="%CommonSetupDir%\Setup.exe" "%App%\%SetupInfDir%\Setup.inf"
UninstallDisplayIcon="%ApplicationDir%\%SetupInfDir%\setup.ico",0
;UninstallOptions=NOREMOVE NOREPAIR NOMODIFY
ReinstallMode=1
HideUninstall=0
SrcDir=..

ApplicationDir=%ProgramFilesDir%\Empirum\%Developername%\%ProductName%\%Version%
SetupInfDir=Install
DataDir=%Personal%
AskUninstallOld=0
ShellLinks=1
CommonShellLinks=1
CreateUnresolvableShellLinks=1
UseStringSection=Strings:09
UseSysStringSection=SysStrings:09
DateWarning=1
SizeWarning=0
Reboot=0
PreventExternalReboot=1
StartServicesOnReboot=0
CallTimeOut=3600
AbortAfterCallTimeOut=1
DisableCancelButton=1
ShowEndMessage=1
EndMessage=%EndMessageDesc%


[Strings:07]
Disk1=Installationsmedium 1
EndMessageDesc=Die Installation wurde erfolgreich abgeschlossen!
ErrorLogMessage=Die Installation/Deinstallation wurde mit einer Fehlermeldung abgebrochen!
InstallationFor=Installation für:
InstallerDesc=Dienstprogramm zum Installieren einzelner Komponenten.
InstallerName=Installationsprogramm
SetupWizard=Installations-Assistent
Uninstallation=deinstallieren
ErrorText=Fehler
CallingText=beim Aufruf von

[Strings:09]
Disk1=Installation media 1
EndMessageDesc=Installation was completed successfully!
ErrorLogMessage=The installation/uninstallation aborted with an error message!
InstallationFor=Installation for:
InstallerDesc=Service program to install single components.
InstallerName=Setup program
SetupWizard=Installation Wizard
Uninstallation=Uninstallation
ErrorText=Error
CallingText=launching

[SysStrings:07]
Users=Benutzer

[SysStrings:09]
Users=Users

[Environment]
ReInstSuccessMessage1031=Die Konfiguration wurde erfolgreich abgeschlossen.
ReInstSuccessMessage1031_1=Die Konfiguration wurde abgeschlossen.
ReInstSuccessMessage1033=Configuration completed successfully.
ReInstSuccessMessage1033_1=Configuration completed.
LogFileFolder=%ProgramData%\Matrix42\Logs\%ProductName%
LogFile=%LogFileFolder%\Log_%ProductName%.%Version%.%Revision%.log
CommonSetupDir=%CommonFilesDir%\Setup%SetupBits%
Uninstallkey=Produktname
V_MachineValuesPath=\\%EmpirumServer%\Values$\MachineValues\%DomainName%
V_UserValuesPath=%HKLM,"Software\matrix42\Software Depot","HomeServer"%\Values$\UserValues\%UserDomain%
RegUninstallKey=HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\%Uninstallkey%,UnInstallString	
DisplayVersion=1
DetectedDisplayVersion=%%HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\%Uninstallkey%,DisplayVersion%%						   
Erfolg=0
Counter=0
; Maschinenabhängige Variablen
; machine dependent variables
;VM_<Variable>=%%%V_MachineValuesPath%\%ComputerName%.ini,%ComputerName%,<Variable>%%

; Userabhängige Variablen
; user dependent variables
;VU_<Variable>=%%%V_UserValuesPath%\%WindowsUser%.ini,%WindowsUser%,<Variable>%%

; !!! Setzen der entsprechenden ReplaceEnv Befehle für die Variablen im Abschnitt [Product] nicht vergessen!!!
; !!! Don't forget to set the appropriate ReplaceEnv instructions for the variables in the section [Product]!!!

[Encryption]

[Disks]
1=%Disk1%

[Options]
Installer = %InstallerName%, COPYALWAYS, Installer, "%InstallerDesc%"
Product   = %ProductName%,   COPYALWAYS, Product,   "%ProductDesc%"

[Installer]
1:..\..\..\..\User\Setup.exe,          %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:..\..\..\..\User\SetupDeu.chm,       %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:..\..\..\..\User\SetupEnu.chm,       %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:%SetupInfDir%\Setup.inf,                             , NORMAL,                                             0
1:%SetupInfDir%\Install.cer,    						, NORMAL,									 0
1:%SetupInfDir%\Install.ps1,   							, NORMAL,											 0
1:%SetupInfDir%\Add-AppDevPackage.ps1,   				, NORMAL,											 0
1:%SetupInfDir%\Uninstall.ps1,   						, NORMAL,											 0
1:%SetupInfDir%\Install.bat,   							, NORMAL,											 0
;1:%SetupInfDir%\setup.ico,                      		, NORMAL,                                            0
1:%Temp%\Setup64.exe,                  %CommonSetupDir%\Setup.exe, OPTIONAL NOSIZEWARNING SETUP ALWAYS WINDOWS64,      0

[FileCheckMachine]
ReplaceEnv V_MachineValuesPath
If DoesFileExist ("%V_MachineValuesPath%\%ComputerName%.ini") == "0" Then "FileIsntThere" EndIf

[FileCheckClient]
ReplaceEnv V_UserValuesPath
If "%UserDomain%" <> "%ComputerName%" Then "CheckClientFile" EndIf

[CheckClientFile]
If DoesFileExist ("%V_UserValuesPath%\%WindowsUser%.ini") == "0" Then "FileIsntThere" EndIf

[FileIsntThere]
ErrorLogMsg Values$\MachineValues\%DomainName%\%ComputerName%.ini or Values$\UserValues\%UserDomain%\%WindowsUser%.ini not found!
Abort

[Product]
#Set:Installation, DONTDELETE CLIENT 
#Ini:Product
#Reg:Product
#check:Deinstallation, DELETE
#Reg:OnUninstallProduct, DELETE

[Set:Installation]
MD "%LogFileFolder%"
Sleep 10000
CallHidden cmd /c "%SetupInfDir%\Install.bat"
Sleep 10000

[AbortUser]
ErrorLogMsg "Desktopverknüpfung wurde nicht erstellt."
Abort

[AbortMSIUnInst]
-Abort
-ErrorLogMsg %ErrorLogMessage% ErrorLevel: %ErrorLevel%

[SET:ChangeMSISourcelist]
ReplaceRegValue (HKCR,"Installer\Products\%V_MSIInstallerID%\Sourcelist","LastUsedSource","\\%EmpirumServer%","\\%%EmpirumServer%%", 1)
ReplaceRegValue (HKCR,"Installer\Products\%V_MSIInstallerID%\Sourcelist\Net","1","\\%EmpirumServer%","\\%%EmpirumServer%%", 1)

[Security:Product]

[Shell:Product]

[Set:Deinstallation]
-Sleep 10000
-Callhidden powershell.exe -file "%app%\Uninstall.ps1" -Logfile '%Logfile%'
-powershell.exe -command "{Get-AppxPackage *SoftwareName* | remove-appxpackage}"
-AddMeter -1
-Sleep 3000

[check:Deinstallation]								 
IF DoesRegKeyExist ("HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*SOFTWARENAME*\Application\ApplicationName") == 0 Then "Set:Deinstallation" EndIf

[Set:DeInstallationError]
-Abort
-ErrorLogMsg %ErrorText% %ErrorLevel% %CallingText% bei Deinstallation Produkt

[Reg:OnUninstallProduct]
HKLM,"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Produktname","Systemcomponent",0x00010001,"0x00000001"
-HKLM,"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Produktname"

[Reg:Product]
HKLM,"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Produktname","Systemcomponent",0x00010001,"0x00000001"

[Ini:Product]		

User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 7969
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by Hendrik_Ambrosius » 27. Jun 2023, 09:53

Ich würde es mal mit einem absoluten Pfad zum Zertifikat und PS-Script probieren.
Außerdem wäre ein Aufruf direkt aus der setup.inf sinnvoll.
Ist alles dort möglich. Woran hakt es?
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

G23
Posts: 79
Joined: 20. Jan 2021, 17:08
Contact:

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by G23 » 27. Jun 2023, 11:30

1. Was ist die Best Practice beim absoluten Pfad?
1.1 sollte ich die komplette Programmbibliothek auf c:\Programm Files\Hersteller\Software\ kopieren
1.2 bzw. sollte ich via %app% diese ins jeweilige Verzeichnis kopieren lassen?

1.3 Meine vorhergehende quick & dirty Lösung:
Hatte hier eine Zip auf den Zielrechner kopiert, extrahiert und installieren lassen, war anhand meines Abteilungsleiters keine gute Lösung für ein sauberes M42 Paket.

2. Probleme mit dem direkten Aufruf in der Setup.inf
Ich hatte versucht den developermodus über einen [Reg:WinDevAktivierung] und später über einen [Reg:WinDevDeAktivierung] direkt im Code auuszuführen, was jedoch dafür sorgte das der Machine Code vor dem Client Code ausgeführt wurde.

User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 7969
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by Hendrik_Ambrosius » 27. Jun 2023, 11:51

1. Ich würde die Dateien auf dem Server in %SRC% speichern, also Produkt\Produkt AG\1.0 und dann nach %APP% kopieren.
Im Moment wird alles nach SetupInfDir kopiert, das ist so nicht gedacht.

2. Sind Sie die Sektionen denn jeweils mit "#" angesprungen?
Sollte ungefähr so aussehen:

[set:installation]
#Reg:WinDevAktivierung
certutil -addstore -user TrustedPeople "%APP%\Install.cer"
powershell.exe -executionpolicy bypass -file "%APP%\dpn0.ps1" -force
#Reg:WinDevDeAktivierung

Wa sich jetzt erst sehe: Anscheinend wird die Installation im Userteil ausgeführt:
#Set:Installation, DONTDELETE CLIENT

Das CLIENT muss da weg, sonst kann es nicht funktionieren da der normale Anwender keine Schreibrechte hat in HKLM und wohl auch keine Powershell-Scripts usw. ausführen kann. Wieso hat das Paket überhaupt einen Userteil?
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 7969
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by Hendrik_Ambrosius » 28. Jun 2023, 15:40

Habe noch mal drüber nachgedacht - kann es sein, dass der RegKey im Systembereich gesetzt und gelöscht werden muss aber dann pro User im Userteil der Cert und PS-Script installiert werden muss?

Das könnte problematisch werden wenn mehr als ein User am Rechner arbeitet weil der Key im Maschinenteil vor jedem Userteil gesetzt werden muss.
Könnt man vielleicht mit einem RUNAS mit Admin-Konto im Userteil lösen?

Optional wenn es nur EIN Anwender ist mit zwei Paketen abdecken:
Maschinenteil Paket 1: Setzt den Key
Userteil Paket 1: Cert + PS + setzt Flag für Paket 2 (z.B. Datei irgendwo)
Maschinenteil Paket 2 (abhängig von Paket 1 und Flag): Setzt den Key zurück
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

G23
Posts: 79
Joined: 20. Jan 2021, 17:08
Contact:

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by G23 » 28. Jun 2023, 16:27

Hallo Herr Ambrosius,

vielen Dank für das Prüfen, genau in dieses Problem laufe ich gerade.

1. Admin speichern,
die administrativen Benutzer dürfen nicht mit einem Passwort hart bei uns gespeichert werden, hier ändern sich auch alle x Tage die Kennwörter.

1.1 User Anmeldungen
es werden mehrere User am PC angemeldet

2. Powershellscript darf nicht mit Systemaccount installiert werden
Weiterhin wirft das Install.PS1 Script einen Fehler aus, da es nicht im System User Kontext installiert werden darf.

2.1 Wenn ich die Bat manuell mit einem Admin ausführen würde, wäre die Installation erfolgreich, jedoch scheine ich die Möglichkeit nicht über Matrix42 fehlerfrei ausführen zu können

3. Frage zum [Product]
Kann man theoretisch einen Product1 und später einen Product2 ausführen lassen indem jeweils Machine und Client Parts ausgeführt werden, aber zuerst alles von Product1 und anschließend alles von Product2?

Code: Select all

[SetupInfo]
Author                  = Autor
CreationDate            = xx.06.2023
InventoryID             =
Description             = SOFTWARE AG - SOFTWARE
Method                  = scripted
Tested on               = Win10
Dependencies            = 
Command line options    = /S2 /AW
Last Change             = xx.06.2023
Build                   = 

;[VarDefInfo]
; <Variable>, <Type: 0=Computer 1=User>, <Allow NULL values: 0=No 1=Yes>

[Setup]
Version=15.0
ShowCaption=1
BlockInput=0
Platform=*

[Requirements]

[Application]
ProductName=SOFTWARE
DeveloperName=SOFTWARE AG
Version=1.0
Revision=0
SetupName=%ProductName% %Version% %SetupWizard%
Text1="%ProductName% %Version%",         Arial,           30, , 000000, 4,    , LEFT BOLD ITALIC 
Text2="%DeveloperName%",                 Arial,           24, , 000000, 4,    , LEFT BOLD ITALIC
Text8="%Company%",                       Arial,           18, , 000000, 4,  10, RIGHT BOLD ITALIC
Text9="%InstallationFor% %WindowsUser%", Arial,           16, , 000000, 4, -18, BOTTOM ITALIC LEFT
BackgroundColor=00B6FF,FFFFFF
CopyDialogRect=0%, 77%, 100%, 100%, HCENTER


; Register all installations in common registry key
UserKeyName=%DeveloperName%\%ProductName%
MachineKeyName=%DeveloperName%\%ProductName%\%Version%
UninstallKeyName=%DeveloperName% %ProductName% %Version%
UninstallDisplayName=%ProductName% %Version%
UninstallString=%ReinstallString% /U
ReinstallString="%CommonSetupDir%\Setup.exe" "%App%\%SetupInfDir%\Setup.inf"
UninstallDisplayIcon="%ApplicationDir%\%SetupInfDir%\setup.ico",0
;UninstallOptions=NOREMOVE NOREPAIR NOMODIFY
ReinstallMode=1
HideUninstall=0
SrcDir=..

ApplicationDir=%ProgramFilesDir%\Empirum\%Developername%\%ProductName%\%Version%
SetupInfDir=Install
DataDir=%Personal%
AskUninstallOld=0
ShellLinks=1
CommonShellLinks=1
CreateUnresolvableShellLinks=1
UseStringSection=Strings:09
UseSysStringSection=SysStrings:09
DateWarning=1
SizeWarning=0
Reboot=0
PreventExternalReboot=1
StartServicesOnReboot=0
CallTimeOut=3600
AbortAfterCallTimeOut=1
DisableCancelButton=1
ShowEndMessage=1
EndMessage=%EndMessageDesc%


[Strings:07]
Disk1=Installationsmedium 1
EndMessageDesc=Die Installation wurde erfolgreich abgeschlossen!
ErrorLogMessage=Die Installation/Deinstallation wurde mit einer Fehlermeldung abgebrochen!
InstallationFor=Installation für:
InstallerDesc=Dienstprogramm zum Installieren einzelner Komponenten.
InstallerName=Installationsprogramm
SetupWizard=Installations-Assistent
Uninstallation=deinstallieren
ErrorText=Fehler
CallingText=beim Aufruf von

[Strings:09]
Disk1=Installation media 1
EndMessageDesc=Installation was completed successfully!
ErrorLogMessage=The installation/uninstallation aborted with an error message!
InstallationFor=Installation for:
InstallerDesc=Service program to install single components.
InstallerName=Setup program
SetupWizard=Installation Wizard
Uninstallation=Uninstallation
ErrorText=Error
CallingText=launching

[SysStrings:07]
Users=Benutzer

[SysStrings:09]
Users=Users

[Environment]
ReInstSuccessMessage1031=Die Konfiguration wurde erfolgreich abgeschlossen.
ReInstSuccessMessage1031_1=Die Konfiguration wurde abgeschlossen.
ReInstSuccessMessage1033=Configuration completed successfully.
ReInstSuccessMessage1033_1=Configuration completed.
MSILogFile=%Temp%\MSI_%ProductName%.%Version%.%Revision%.log
CommonSetupDir=%CommonFilesDir%\Setup%SetupBits%
Uninstallkey=SOFTWARE
V_MachineValuesPath=\\%EmpirumServer%\Values$\MachineValues\%DomainName%
V_UserValuesPath=%HKLM,"Software\matrix42\Software Depot","HomeServer"%\Values$\UserValues\%UserDomain%
RegUninstallKey=HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\%Uninstallkey%,UnInstallString	
DisplayVersion=1
DetectedDisplayVersion=%%HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\%Uninstallkey%,DisplayVersion%%						   
Erfolg=0
Counter=0
; Maschinenabhängige Variablen
; machine dependent variables
;VM_<Variable>=%%%V_MachineValuesPath%\%ComputerName%.ini,%ComputerName%,<Variable>%%

; Userabhängige Variablen
; user dependent variables
;VU_<Variable>=%%%V_UserValuesPath%\%WindowsUser%.ini,%WindowsUser%,<Variable>%%

; !!! Setzen der entsprechenden ReplaceEnv Befehle für die Variablen im Abschnitt [Product] nicht vergessen!!!
; !!! Don't forget to set the appropriate ReplaceEnv instructions for the variables in the section [Product]!!!

[Encryption]

[Disks]
1=%Disk1%

[Options]
Installer = %InstallerName%, COPYALWAYS, Installer, "%InstallerDesc%"
Product   = %ProductName%,   COPYALWAYS, Product,   "%ProductDesc%"

[Installer]
1:..\..\..\..\User\Setup.exe,          %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:..\..\..\..\User\SetupDeu.chm,       %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:..\..\..\..\User\SetupEnu.chm,       %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:%SetupInfDir%\Setup.inf,                             , NORMAL,                                             0
;1:%SetupInfDir%\setup.ico,                      		, NORMAL,                                            0
1:%src%\Runtime-Live-1.120.22550.0-UWP-x86_x86.cer,    , NORMAL,											 0
1:%Temp%\Setup64.exe,                  %CommonSetupDir%\Setup.exe, OPTIONAL NOSIZEWARNING SETUP ALWAYS WINDOWS64,      0

[FileCheckMachine]
ReplaceEnv V_MachineValuesPath
If DoesFileExist ("%V_MachineValuesPath%\%ComputerName%.ini") == "0" Then "FileIsntThere" EndIf

[FileCheckClient]
ReplaceEnv V_UserValuesPath
If "%UserDomain%" <> "%ComputerName%" Then "CheckClientFile" EndIf

[CheckClientFile]
If DoesFileExist ("%V_UserValuesPath%\%WindowsUser%.ini") == "0" Then "FileIsntThere" EndIf

[FileIsntThere]
ErrorLogMsg Values$\MachineValues\%DomainName%\%ComputerName%.ini or Values$\UserValues\%UserDomain%\%WindowsUser%.ini not found!
Abort

[Product]
#Set:Installation, DONTDELETE MACHINE
#Set:AddPackage, DONTDELETE CLIENT
#Ini:Product
#Reg:UnDevMode, MACHINE 
#Reg:Product
#check:Deinstallation, DELETE MACHINE
#Reg:OnUninstallProduct, DELETE

[Set:Installation]
;versteckter Produktiver Vorgang
call cmd /c REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
sleep 3000
call powershell -executionpolicy bypass -file "%src%\Install.ps1" -force 
sleep 42000
call cmd /c REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "0"

[Set:AddPackage]
CallHidden cmd /c certutil -addstore -user my %app%\install.cer"
call powershell.exe -executionpolicy bypass -command "add-appxpackage -register 'C:\Program Files\WindowsApps\SOFTWARE.SOFTWARE\Appxmanifest.xml' -DisableDevelopmentMode"

[AppExist]
ReplaceEnv DetectedDisplayVersion
If %DetectedDisplayVersion% >= %DisplayVersion% & DoesRegKeyExist ("HKLM,Software\%MachineKeyName%\Setup,ProductName") == "0" Then "AppExistMsg" EndIf

[AppNotExistMsg]
-Exit The application is not present and the package is only unregistered.
-SetReboot 2
-ErrorLogMsg The application is not present. Uninstallation is not executed. Only setup.inf is deleted and package is unregistered. 
Exit!

[AppNotExist]
If DoesRegKeyExist ("%RegUninstallKey%") == "0" Then "AppNotExistMsg" EndIf

[AbortUser]
ErrorLogMsg "Desktopverknüpfung wurde nicht erstellt."
Abort

[AbortMSIUnInst]
-Abort
-ErrorLogMsg %ErrorLogMessage% ErrorLevel: %ErrorLevel%

[SET:ChangeMSISourcelist]
ReplaceRegValue (HKCR,"Installer\Products\%V_MSIInstallerID%\Sourcelist","LastUsedSource","\\%EmpirumServer%","\\%%EmpirumServer%%", 1)
ReplaceRegValue (HKCR,"Installer\Products\%V_MSIInstallerID%\Sourcelist\Net","1","\\%EmpirumServer%","\\%%EmpirumServer%%", 1)

[Security:Product]

[Shell:Product]

[Set:Deinstallation]
Sleep 10000
-powershell.exe -command "{Get-AppxPackage *SOFTWARE* | remove-appxpackage}"
-AddMeter -1

[check:Deinstallation]								 
IF DoesRegKeyExist ("HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppXd65vbc1yz3yzmp3w8353heknn58jqptg\Application\ApplicationName") == 0 Then "Set:Deinstallation" Else "AppNotExist" EndIf

[Set:DeInstallationError]
-Abort
-ErrorLogMsg %ErrorText% %ErrorLevel% %CallingText% bei Deinstallation SOFTWARE

[Reg:UnDevMode]
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock","AllowDevelopmentWithoutDevLicense",0x00010001,"1"

[Reg:OnUninstallProduct]
HKLM,"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\SOFTWARE","Systemcomponent",0x00010001,"0x00000001"
-HKLM,"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\SOFTWARE"

[Reg:Product]
HKLM,"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\SOFTWARE","Systemcomponent",0x00010001,"0x00000001"

[Ini:Product]		


User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 7969
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by Hendrik_Ambrosius » 28. Jun 2023, 21:52

Nein, pro Paket gibt es jeweils nur EINEN Machine- und Userteil.
Daher müssen es wohl 2 Pakete werden für MACHINE-USER-MACHINE-Abläufe.
Löst aber nicht das Problem mit mehren Usern.

Dazu folgende Idee:

Um den RegKey aus einem im Userteil gestarteten Script zu setzen könnte man noch den Trick über SETUPCLI benutzen:
https://helpfiles.matrix42-web.de/2021_ ... t=setupcli

Habe ich schon ewig nicht mehr benutzt, ich hoffe, das geht noch mit dem UEM Agent.

Dann könnte man aus dem Userteil heraus oder über ein per RUNONCE gestartetes Batchfile im Userkontext den RegKey vorher und nachher mit den Rechten des UEM Agent Dienstes setzen und dazwischen das Script ausführen.

Man könnte z.B. via setup.exe eine Minimal-Setup.inf die nicht wirklich ein Paket ist mit setupcli ausführen:

[Setup]
Version=6.5
ShowCaption=1
Platform=x64

[Requirements]

[Application]
ShowEndMessage=0
DisableCancelButton=1
SrcDir=..

[Options]
run = run, COPYALWAYS

[run]
#reg:xy

...
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

G23
Posts: 79
Joined: 20. Jan 2021, 17:08
Contact:

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by G23 » 29. Jun 2023, 13:19

Vielen Dank für die Rückmeldung,
wir können es auch mit dem CallRunAs Befehl testen, diesen hatte ich jedoch bisher noch nicht genutzt.

1. Wenn ich einen Admin Benutzer erstellen möchte im Paket der den Befehl als CallRunAs ausführt,
1.1 geht das mit aktivierter UAC? Habe hier Beiträge gesehen, dass es nicht geht.
1.1.1 Wie kann ich dies lösen?

1.2. Wo bekomme ich im Handbuch oder Forum mehr Ressourcen dazu? Ich habe einige dutzend Beiträge gelesen, fand die zwei hier sehr Hilfreich. Jedoch wäre ich für andere Beiträge dankbar die Hilfreich wären.
- - viewtopic.php?t=13827
- - viewtopic.php?t=12644

Eintrag aus dem Handbuch
CallRunAs /U:<Benutzerkonto> /P:<Passwort> "<Programmname>" [<Programmparameter>]

Führt das angegebene Programm unter dem angegebenen Benutzerkonto aus. Ist das Profil des angegebenen Benutzers lokal nicht vorhanden, wird es automatisch angelegt (nur möglich ab Windows Vista). Setup pausiert solange, bis das Programm beendet wurde. Für eine erfolgreiche Ausführung muss auf dem Computer der Windows Dienst "Sekundäre Anmeldung" aktiviert sein. Das Passwort ist entweder als Klartext, Setup- oder Sync-verschlüsselt anzugeben. Die Verschlüsselung erfolgt mittels EmpCrypt.exe.

Hinweis: Arbeitet nicht bei aktivierter Benutzerkontensteuerung (UAC)!

Beispiel:
CallRunas /U:Admin /P:Pa$$w0rd "%Src%\Install\Check.exe" /S /K
2. Kann ich diese im MACHINE Teil ausführen lassen?

*** wird erfolgreich ausgeführt

Code: Select all

[Set:Installation]
CallHidden net user Admin Pa$$w0rd /ADD
***wird bei mir nicht ausgeführt, wahrscheinlich wegen der UAC? mit dem Systembenutzer via CMD funktioniert es

Code: Select all

CallHidden net localgroup Administratoren Admin /ADD

Code: Select all

call cmd /c REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
CallRunAs /U:Admin /P:Pa$$w0rdPowershell.exe -executionpolicy bypass -file "%src%\Install.ps1" -force
call cmd /c REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "0"
CallHidden net localgroup administratoren Admin /delete
CallHidden net user Admin /delete

User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 7969
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by Hendrik_Ambrosius » 29. Jun 2023, 16:17

Wenn die Installation aus dem Maschinenteil erfolgt ist UAC kein Problem da es via local system gestartet wird.
Aus dem Userteil muss es getestet werden, hängt von den GPOs ab. Daher wäre SETUPCLI vielleicht besser als CallRunAs.
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

G23
Posts: 79
Joined: 20. Jan 2021, 17:08
Contact:

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by G23 » 30. Jun 2023, 13:57

Danke ich werde mich in die SETUPCLI einlesen und es testen.

*Anpassung,
1. Der User lässt sich jetzt lokal zu den lokalen Administratoren hinzufügen.
2. Dennoch wird bei callrunas die Powershell nicht korrekt installiert.
2.1 Diese öffnet jedoch eine weitere Powershell, diese habe ich hinzugefügt in den Aufruf, jedoch scheint dies nicht zu helfen, die PS Installation auszuführen

Code: Select all

CallHidden net user Admin password /ADD /Y 
CallHidden CMD /C net localgroup Administratoren Admin /ADD

call cmd /c REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"

 
CallRunAs /U:Admin /P:password Powershell.exe -executionpolicy bypass -file "%src%\Install.ps1" -force
CallRunAs /U:Admin /P:password Powershell.exe -executionpolicy bypass -file "%src%\install2.ps1" -force
sleep 33333

call cmd /c REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "0"

CallHidden net localgroup administratoren Admin /delete
CallHidden net user Admin /delete

[Set:UserCheck]
If "Admin" INGLOBALGROUP "Administratoren" Then "DelUser" 

[DelUser]
CallHidden net localgroup administratoren Admin /delete
CallHidden net user Admin /delete
CallHidden cmd.exe /c "%src%\deluser.bat"

If "Admin" INLOCALGROUP "Administratoren" Then "ErrorUser"

[ErrorUser]
ErrorLogMsg "lokaler User ET wurde nicht gelöscht, bitte löschen." 
; *** Stimmt das? ***
If "Admin" INLOCALGROUP "Administratoren" Then "ErrorUser"
If "<Benutzer>" INLOCALGROUP "<Gruppe>" Then & [Else &] EndIf
Testet, ob ein Benutzer in einer bestimmten lokalen Gruppe (\\<Servername>\Gruppe) ist und führt den entsprechenden Zweig aus.

[ErrorUser]
ErrorLogMsg "lokaler User Admin wurde nicht gelöscht, bitte löschen."

inwieweit weicht dies beim Program von der korrektheit ab?

Code: Select all

CallRunAs /U:admin /P:password Powershell.exe -executionpolicy bypass -file "%src%\Add-AppDevPackage.ps1" -force
Handbuch
CallRunAs /U:<Benutzerkonto> /P:<Passwort> "<Programmname>" [<Programmparameter>]


Führt das angegebene Programm unter dem angegebenen Benutzerkonto aus. Ist das Profil des angegebenen Benutzers lokal nicht vorhanden, wird es automatisch angelegt (nur möglich ab Windows Vista). Setup pausiert solange, bis das Programm beendet wurde. Für eine erfolgreiche Ausführung muss auf dem Computer der Windows Dienst "Sekundäre Anmeldung" aktiviert sein. Das Passwort ist entweder als Klartext, Setup- oder Sync-verschlüsselt anzugeben. Die Verschlüsselung erfolgt mittels EmpCrypt.exe.

Hinweis: Arbeitet nicht bei aktivierter Benutzerkontensteuerung (UAC)!

Beispiel:
CallRunas /U:Admin /P:Pa$$w0rd "%Src%\Install\Check.exe" /S /K
Last edited by G23 on 04. Jul 2023, 09:45, edited 2 times in total.

User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 7969
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by Hendrik_Ambrosius » 30. Jun 2023, 19:02

Sieht für mich OK aus, aber ich würde %$LocalAdmins% nehmen statt Administratoren, weil das sonst nur auf nativ deutschen System läuft.

Hier Beispiele für die Checks:
IF "%WindowsUser%" InLocalGroup "%$LocalAdmins%" THEN "MachWas" ELSE "MachNix" ENDIF
IF "%WindowsUser%" InGlobalGroup "%LogonServer%\%$DomainAdmins%" THEN "MachWas" ELSE "MachNix" ENDIF
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

G23
Posts: 79
Joined: 20. Jan 2021, 17:08
Contact:

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by G23 » 04. Jul 2023, 13:38

Hallo Herr Ambrosius,

wenn ich die Setupcli.exe aus dem Matrix42 Managment Console Verzeichnis des Empirum ausführen möchte, laufe ich leider in eine nicht Reaktion der Datei. Es öffnet sich kein Dialog. Wenn ich die Datei aus dem Package Ordner auf ein Testsystem kopiere, es dann ausführe laufe ich auch in einen Fehler.

Könnte mir hier bitte jemand mehr Informationen geben wie ich die Datei ordnungsgemäß ausgeführt bekomme, damit ich an die Stelle komme, bei der die Dokumentation anfängt?

User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 7969
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by Hendrik_Ambrosius » 04. Jul 2023, 13:43

Nicht die Datei einfach starten.
Sie müssen eine spezielle Datei (Setup Client) mit Ihrem Aufrufparameter wie hier beschrieben erstellen:
https://helpfiles.matrix42-web.de/2021_ ... endung.htm
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

G23
Posts: 79
Joined: 20. Jan 2021, 17:08
Contact:

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by G23 » 05. Jul 2023, 09:10

Verzeihen Sie, aufgrund der einzelnen Seite war mir nicht klar, das ich dies wie folgt mache:

Matrix42 Managment Console, Konfiguration, Software Manager, Paket wählen, Extras, verschlüsseltes Paket erzeugen

was sich natürlich aus den übergeordneten Dokumentationsstrukturen herauslesen lässt.

G23
Posts: 79
Joined: 20. Jan 2021, 17:08
Contact:

Re: Matrix42 Paket soll Batch ausführen welche eine Powershell ausführen soll

Post by G23 » 07. Jul 2023, 16:49

Ich habe jetzt ein seltsames Phänomen.

das folgende Script funktioniert, wenn ich einmal händisch den User via CMD angemeldet habe. Hatte von euch schon jemand die Problematik, dass er einen lokalen User erstellen wollte, welcher zwar bestimmte Aktionen ausführen darf, aber wenn es um eine andere bestimmte Aktion (Powershell ausführen) geht, dann streikt?

Code: Select all

CallHidden cmd /c net user %Installuser% %PW% /ADD
CallHidden cmd /c net user %Installuser% %PW%
CallHidden cmd /c net user %Installuser% %PW% /Active:YES
CallHidden CMD /C net localgroup Administratoren %Installuser% /ADD
(werden alle nachweißlich erfolgreich via Matrix42 ausgeführt)

CallRunAs /U:%Installuser% /P:%PW% "%src%\psexec.exe" -u %Installuser% -p %PW% -accepteula cmd /k C:\Windows\system32\WindowsPowerShell\v1.0\Powershell.exe -executionpolicy bypass -file "%src%\Install.ps1" -force
Last edited by G23 on 07. Jul 2023, 17:02, edited 1 time in total.

Post Reply

Return to “Paketierung”

Who is online

Users browsing this forum: No registered users and 1 guest