User Tools

Site Tools


userspace:msi_to_opsi

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

userspace:msi_to_opsi [2013/07/30 06:53]
qx23 created
userspace:msi_to_opsi [2021/08/23 08:37]
Line 1: Line 1:
-====== MSI to OPSI ====== 
-Tested on: Win7 64-bit 
  
-Requieres: Powershell 2.0, MSI Module for Powershell 
- 
-Download MSI Module for Powershell: http://psmsi.codeplex.com/ 
- 
- 
-Dieses Powershellscript extrahiert informationen aus MSI Paketen und erstellt automatisiert anhand eines Templates fertige Opsiskripte inkl. control-Datei und der passenden Verzeichnisstruktur um die fertigen Daten auf den Opsiserver kopieren zu können. 
- 
-''[msi_to_opsi.ps1]'' 
-<code> 
-# Version: 0.1 
-# Date: 30.7.2013 
-# Author: Chris 
-# Description: Retrieve informations from multiple MSI files and create OPSI package scripts from that. 
-# How to use: MSI Files in poolfoldername will be processed by msi powershell module. Place MSI files in folder pool, run script, retrieve ready to use Opsi scripts from folder OUTPUT 
- 
-$testmodulemsi = Get-Module -ListAvailable | Where-Object { $_.name -eq "MSI" } 
-if (($testmodulemsi)) 
-{ 
-Import-Module -Name MSI  -ErrorAction SilentlyContinue 
-Write-Host "Module MSI loaded." 
- 
-else {  
-Write-Host `n"FATAL ERROR: Module MSI not available on this system. Please install Module MSI for PowerShell first. You can get it from here http://psmsi.codeplex.com/" `n 
-Write-Host "THIS IS A FATAL ERROR. EXITING NOW."`n`n 
-exit 
-} 
- 
-$DateTime = (Get-Date -Format s) -Replace "T", "_" -Replace ":", "." 
- 
-## Specify some global settings 
- 
-$BaseFolder = "C:\msi_to_opsi" 
- 
-# Poolfoldername is the location with the basefolder where the installers and theire procducte images are located. 
-$PoolFolderName = "Pool" 
-$InputFolder = $BaseFolder + "\" + $PoolFolderName + "\" 
- 
-# OPSI Package Parameter 
-$DefaultValueMinimumspace = "1000 MB" 
-$priority = "0" 
-$packageversion = "1_autoconvert" 
- 
-# Set Log Folder 
-$LogFolder = "$BaseFolder\Logs" 
-If(!(Test-Path "$BaseFolder\Logs")){New-Item -ItemType Directory -Path "$BaseFolder\Logs"} 
-$log  = $LogFolder + "\create_opsi_packages_" + $DateTime +".log"  
- 
-# MSI Parameter 
-$installparameter = "/gb-! REBOOT=REALLYSUPPRES" 
-$uninstallparameter = "/gb-! REBOOT=REALLYSUPPRES" 
- 
- 
-# Move finishe packages to Opsi server. Not implementet (yet) 
-$CopyToOpsiServer = $false 
-$OpsiServerName = "opsi2" 
-$OpsiUserName = "pcpatch" 
-$OpsiPasswordName = "1234" 
-$CreatedLinuxShellScript = $false 
- 
-foreach ($msifile in Get-ChildItem .\Pool -Filter *.msi -name) { 
- 
-$fullmsifile = $InputFolder + $msifile 
-$productName = get-msitable $fullmsifile -table Property | where-object { $_.Property -eq "ProductName" } | select-object -expand Value 
-$productNameFlat = ($productName) -Replace " ", "_" #-Replace "'('", "_" -Replace "')'", "_" -Replace "[", "_" -Replace "]", "_" 
-$description = "Automatically translated MSI-Package: " + $productName 
- 
-$progamversion = get-msitable $fullmsifile -table Property | where-object { $_.Property -eq "ProductVersion" } | select-object -expand Value 
-$msiid = get-msitable $fullmsifile -table Property | where-object { $_.Property -eq "ProductCode" } | select-object -expand Value 
- 
-$uninstallprogramm = $msifile 
-$uninstallprogramm = $msifile 
-$installexec =  $msifile 
- 
-write-host "Paket: " $productName 
- 
-$packagename = $productName.ToLower() 
-$OutputPackageFolder = $BaseFolder + "\OUTPUT\$productNameFlat" 
-$InstallerExecutable = $fullmsifile 
-$OutputPackageFolderClientData = $OutputPackageFolder + '\CLIENT_DATA\' 
- 
-# Create packagefolder structur 
-"Building Opsipackage: " + $productName + "`n" + "`n" | Out-File $log -append 
- 
-If(!(Test-Path "$OutputPackageFolder")) 
-{ 
-New-Item -ItemType Directory -Path "$OutputPackageFolder" 
-"Created folder " + $OutputPackageFolder | Out-File $log -append 
-} 
-Else 
-{ 
-"SKIPPED: Folder " + $OutputPackageFolder + " already exists." | Out-File $log -append 
-} 
-If(!(Test-Path "$OutputPackageFolder\OPSI")) 
-{ 
-New-Item -ItemType Directory -Path "$OutputPackageFolder\OPSI" 
-"Created folder " + $OutputPackageFolder + "\OPSI" | Out-File $log -append 
-} 
-Else 
-{ 
-"SKIPPED: Folder " + $OutputPackageFolder + "\OPSI already exists."| Out-File $log -append 
-} 
- 
-If(!(Test-Path "$OutputPackageFolder\CLIENT_DATA")) 
-{ 
-New-Item -ItemType Directory -Path "$OutputPackageFolder\CLIENT_DATA" 
-"Created folder " + $OutputPackageFolder + "\CLIENT_DATA" | Out-File $log -append 
-} 
-Else 
-{ 
-"SKIPPED: Folder " + $OutputPackageFolder + "\CLIENT_DATA already exists."| Out-File $log -append 
-} 
- 
- 
-$minimumspace = $DefaultValueMinimumspace 
- 
-# Create setup.ins 
-$original_file_setup_ins = $BaseFolder + '\Templates\CLIENT_DATA\setup.ins' 
-$destination_file_setup_ins =  $OutputPackageFolder + '\CLIENT_DATA\setup.ins' 
- 
-(Get-Content $original_file_setup_ins) | Foreach-Object { 
-    $_ -replace 'PSVAR_PACKAGENAME', $packagename ` 
-       -replace 'PSVAR_MINIMUMSPACE', $minimumspace ` 
-       -replace 'PSVAR_INSTALLDIR', $installdir ` 
-    -replace 'PSVAR_INSTALLEXEC', $installexec ` 
-    -replace 'PSVAR_INSTALLPARAMETER', $installparameter ` 
-    -replace 'PSVAR_UNINSTALLPARAMETER', $uninstallparameter ` 
-    -replace 'PSVAR_UNINSTALLPROGRAMM', $uninstallprogramm ` 
-    -replace 'PSVAR_INSTALLSTRING', $installstring ` 
-    -replace 'PSVAR_EXITCODECHECKSTRING', $ExitCodeCheckstring ` 
-    -replace 'PSVAR_MSIID', $msiid ` 
-    -replace 'PSVAR_PRODUCTNAME', $productName 
-   } | Set-Content $destination_file_setup_ins 
- 
-# Create uninstall.ins 
- 
-$original_file_uninstall_ins = $BaseFolder + '\Templates\CLIENT_DATA\uninstall.ins' 
-$destination_file_uninstall_ins =  $OutputPackageFolder + '\CLIENT_DATA\uninstall.ins' 
- 
-(Get-Content $original_file_uninstall_ins) | Foreach-Object { 
-    $_ -replace 'PSVAR_PACKAGENAME', $packagename ` 
-       -replace 'PSVAR_MINIMUMSPACE', $minimumspace ` 
-       -replace 'PSVAR_INSTALLDIR', $installdir ` 
-    -replace 'PSVAR_INSTALLEXEC', $installexec ` 
-    -replace 'PSVAR_INSTALLPARAMETER', $installparameter ` 
-    -replace 'PSVAR_UNINSTALLPARAMETER', $uninstallparameter ` 
-    -replace 'PSVAR_UNINSTALLPROGRAMM', $uninstallprogramm ` 
-    -replace 'PSVAR_INSTALLSTRING', $installstring ` 
-    -replace 'PSVAR_MSIID', $msiid ` 
-    -replace 'PSVAR_PRODUCTNAME', $productName 
-   } | Set-Content $destination_file_uninstall_ins 
- 
-# Create delsub.ins 
- 
-$original_file_delsub_ins = $BaseFolder + '\Templates\CLIENT_DATA\delsub.ins' 
-$destination_file_delsub_ins =  $OutputPackageFolder + '\CLIENT_DATA\delsub.ins' 
- 
-(Get-Content $original_file_delsub_ins) | Foreach-Object { 
-    $_ -replace 'PSVAR_PACKAGENAME', $packagename ` 
-       -replace 'PSVAR_MINIMUMSPACE', $minimumspace ` 
-       -replace 'PSVAR_INSTALLDIR', $installdir ` 
-    -replace 'PSVAR_INSTALLEXEC', $installexec ` 
-    -replace 'PSVAR_INSTALLPARAMETER', $installparameter ` 
-    -replace 'PSVAR_UNINSTALLPARAMETER', $uninstallparameter ` 
-    -replace 'PSVAR_UNINSTALLPROGRAMM', $uninstallprogramm ` 
-    -replace 'PSVAR_INSTALLSTRING', $installstring ` 
-    -replace 'PSVAR_EXITCODECHECKSTRING', $ExitCodeCheckstring ` 
-    -replace 'PSVAR_MSIID', $msiid 
-   } | Set-Content $destination_file_delsub_ins 
- 
- 
-# Create OPSI Controlfile 
-$original_file_opsi_control = $BaseFolder + "\Templates\OPSI\control" 
-$destination_file_opsi_control =  $OutputPackageFolder + "\OPSI\control" 
- 
-(Get-Content $original_file_opsi_control) | Foreach-Object {  
- $_ -replace "PSVAR_PACKAGENAME", $packagename ` 
- -replace 'PSVAR_PACKAGEVERSION', $packageversion ` 
- -replace 'PSVAR_DESCRIPTION', $description ` 
- -replace 'PSVAR_NAME', $productname ` 
- -replace 'PSVAR_PROGRAMMVERSION', $progamversion ` 
- -replace 'PSVAR_PRIORITY', $priority 
- } | Set-Content $destination_file_opsi_control 
- 
-# Copy executable files und producticons 
- 
-If(!(Test-Path $InstallerExecutable)) 
-{ 
-Write-Host "Error: Installerfile ($InstallerExecutable) not found, package will not be complete" 
-"Error: Installerfile ($InstallerExecutable) not found, package will not be complete" | Out-File $log -append 
-} 
-Else 
-{ 
-Copy-Item -Path $InstallerExecutable -Destination $OutputPackageFolderClientData  
-} 
- 
-} 
- 
-</code> 
userspace/msi_to_opsi.txt · Last modified: 2021/08/23 08:37 (external edit)