ConfigMgr: TortoiseSVN 1.9.4 verteilen
Hier das minimalistische Script für TortoiseSVN 1.9.4:
<appdefinition> <file>TortoiseSVN-1.9.4.27285-x64-svn-1.9.4.msi</file> <hash type="SHA256">7CAD40E63FF5400483F853642477AD17C88177A530C053EA307243E17C6192DC</hash> <info> <setupType>MSI</setupType> <isX86>false</isX86> </info> <install/> <uninstall/> <detection/> <dependency/> <supersedence> <deploymentType uninstall="false" type="SHA256">0D3894C8B0E6F116C34408E87C645757E9B568ABCCE3C9FCEA42076FA7A01293</deploymentType><!--TortoiseSVN-1.8.11.26392-x64-svn-1.8.13.msi--> <deploymentType uninstall="false" type="SHA256">5059209B24972D978E80AFCAC1721AAFB560C42C59ED193689EEE23563D23850</deploymentType><!--TortoiseSVN-1.9.3--> </supersedence> </appdefinition>
ConfigMgr: Firefox ESR 45.2.0 verteilen
Firefox ESR gibt es aktuell in der Version 45.2.0. Für das Update (inkl. Supersedence) habe ich unten das passende Script angehängt.
Download unter: https://www.mozilla.org/en-US/firefox/organizations/all/
<appdefinition>
<file>Firefox Setup 45.2.0esr.exe</file>
<hash type="SHA256">CA99927AA526C7C002C137337BFA0A1CB2C9118F8C7568F1F3B5C6DCDBAEEE08</hash>
<info>
<company>Mozilla Corporation</company>
<productName>Mozilla Firefox</productName>
<productversion>45.2.0</productversion>
<setupType>NSIS</setupType>
<isX86>true</isX86>
<hasUninstall>true</hasUninstall>
</info>
<install>
$inf=Join-Path $env:temp firefox.ini
$content="[Install]
QuickLaunchShortcut=false
DesktopShortcut=false
MaintenanceService=false" -replace "`n", "`r`n"
Out-File -FilePath $inf -Force -InputObject $content -Encoding ascii
Show-InstallationProgress -StatusMessage "Installing $appName $appVersion. This may take some time. Please wait..."
Execute-Process -Path "Firefox Setup 45.2.0esr.exe" -Parameters "/INI=`"$inf`"" -WindowStyle Hidden
</install>
<uninstall>
if ([IntPtr]::Size -eq 8) {$regPath="HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"} else { $regPath="HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"}
$item=Get-ItemProperty $regPath | where {$_.DisplayName -like "*Mozilla Firefox*" -and $_.DisplayVersion -eq "45.2.0"}
Execute-Process -Path ($item.UninstallString -replace "`"", "") -Parameters "/S"
</uninstall>
<detection/>
<dependency/>
<supersedence>
<deploymentType uninstall="false" type="SHA256">8CA1EC61B9DF30DDCEF3E7CE5234C2BEF6EC7C9C3A4B51F57C67FC9E8822E7FB</deploymentType><!--38.2.0-->
<deploymentType uninstall="false" type="SHA256">40DC3DF8C548819733386B70791DB753793E98C5F08283001D851A204376F017</deploymentType><!--38.2.1-->
<deploymentType uninstall="false" type="SHA256">FDC5BAA6033918E7FE8018DE130F16A23896B623B0B4F60A8EA578759C2DD29C</deploymentType><!--38.6.0-->
<deploymentType uninstall="false" type="SHA256">771A00786C69F7290A25C495A03622B4616C21D6A062BC712F55E0AE0282C219</deploymentType><!--38.6.1-->
<deploymentType uninstall="false" type="SHA256">85B1438D427FB6C9A52415BF46239AD491FD30EA410698ECDE256D0BC9AE7DB4</deploymentType><!--45.0.0-->
<deploymentType uninstall="false" type="SHA256">4477B833266C0ED9306AFC8347A547C1D27AB854C0438BC353A943C00774CAFD</deploymentType><!--45.0.1-->
</supersedence>
</appdefinition>
Acrobat Reader 2015 Build 30121
Auch der Acrobat Reader in der 2015 Version (nicht die “Cloud” Variante DC) wurde auf Build 30121 aktualisiert. Dafür stellt Adobe eine passende Patch-Datei (MSP) bereit. Dieses Verteilscript setzt somit auf die vollständige Version von Adobe Reader 2015 auf (=dependency) und ersetzt den alten Build 30119 (=supersedence). Es zeigt somit alle drei Neuerungen in der aktuellen automateAppDeployment Version: Dependeny, Supersedence und MSP.
<appdefinition>
<file>AcroRdr2015Upd1500630121_MUI.msp</file>
<hash type="SHA256">345351B04EE45E85194126AE0884A0B8AAC5DCEDA34D42AB18F3E6413C8D41F9</hash>
<info fromFile="true">
<company>Adobe Systems Incorporated</company>
<productName>Adobe Reader 2015</productName>
<productVersion>15.006.30121</productVersion>
<setupType>MSP</setupType>
<isX86>true</isX86>
</info>
<install fromSetupType="false">
Execute-MSI -Action Patch -Path "AcroRdr2015Upd1500630121_MUI.msp" -Parameters "REBOOT=ReallySuppress /qn"
#disable arm
$regPrefix="HKEY_LOCAL_MACHINE\SOFTWARE\"
if ($is64Bit) {
$regPrefix="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\"
}
set-registryKey -Key ($regPrefix+"Adobe\Adobe ARM\1.0\ARM") -Name "iCheckReader" -value 0 -Type "DWord"
#remove run key
$runKey="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
$run=Get-Item $runKey
$runValue="Adobe ARM"
if ($run.GetValue($runValue,$null)) {
remove-itemProperty -Path $runKey -Name $runValue
}
if ($is64Bit) {
$runKey="HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run"
$run=Get-Item $runKey
if ($run.GetValue($runValue,$null)) {
remove-itemProperty -Path $runKey -Name $runValue
}
}
#disable online features
#http://www.adobe.com/devnet-docs/acrobatetk/tools/PrefRef/Windows/FeatureLockdown.html
#new: http://www.adobe.com/devnet-docs/acrobatetk/tools/AdminGuide/services.html
$regPath=($regPrefix+"Policies\Adobe\Acrobat Reader\2015\FeatureLockDown")
set-registryKey -Key $regPath -Name "bUsageMeasurement" -value 0 -Type "DWord"
set-registryKey -Key $regPath -Name "bShowEbookMenu" -value 0 -Type "DWord"
set-registryKey -Key $regPath -Name "bShowEbookMenu" -value 0 -Type "DWord"
set-registryKey -Key $regPath -Name "bCommercialPDF" -value 0 -Type "DWord"
set-registryKey -Key $regPath -Name "bUpdater" -value 0 -Type "DWord"
set-registryKey -Key $regPath -Name "bCreatePDFOnline" -value 0 -Type "DWord"
set-registryKey -Key $regPath -Name "bPurchaseAcro" -value 0 -Type "DWord"
#Specifies whether to show the menu item that opens the online Actions file library.
set-registryKey -Key $regPath -Name "bFindMoreWorkflowsOnline" -value 0 -Type "DWord"
#Specifies whether to show the menu item that opens the online Acrobat Tool Set Exchange.
set-registryKey -Key $regPath -Name "bFindMoreCustomizationsOnline" -value 0 -Type "DWord"
#This bEnableAcrobatHS service master switch disables all features of the Fill and Sign Pane except for the Work with Certificates accordion. When forms are opened, the Fill and Sign Pane does not auto open.
set-registryKey -Key $regPath -Name "bEnableAcrobatHS" -value 0 -Type "DWord"
#Don't allow file storage on Acrobat.com.
set-registryKey -Key ($regPath+"\cCloud") -Name "bDisableADCFileStore" -value 1 -Type "DWord"
#disable protected mode...
set-registryKey -Key $regPath -Name "bProtectedMode" -value 0 -Type "DWord"
</install>
<uninstall/>
<detection/>
<dependency>
<dependencyGroup name="Acrobat Reader 2015">
<application autoInstall="true" type="SHA256">2C374210AF21AE7ABAA4A5DE12B2C9A84E4942E94167B95E218FF27D072AB8BC</application>
</dependencyGroup>
</dependency>
<supersedence>
<deploymentType uninstall="false" type="SHA256">934A4DB4EFE7B825378177BDED26D889A27B19D3A0AD06D2D37A93896B1FF326</deploymentType><!--Build 30119-->
</supersedence>
</appdefinition>
ConfigMgr: Firefox ESR 45.0.1 verteilen
Im Rahmen des erweiterten Releasezyklus von Firefox ESR war jetzt wieder ein Versionssprung von 38 auf 45 dran. Dies bedeutet für die Anwender eine angepasste Oberfläche. Für das Upgrade (inkl. Supersedence) habe ich unten das passende Script angehängt.
Download unter: https://www.mozilla.org/en-US/firefox/organizations/all/
<appdefinition>
<file>Firefox Setup 45.0.1esr.exe</file>
<hash type="SHA256">4477B833266C0ED9306AFC8347A547C1D27AB854C0438BC353A943C00774CAFD</hash>
<info>
<company>Mozilla Corporation</company>
<productName>Mozilla Firefox</productName>
<productversion>45.0.1</productversion>
<setupType>NSIS</setupType>
<isX86>true</isX86>
<hasUninstall>true</hasUninstall>
</info>
<install>
$inf=Join-Path $env:temp firefox.ini
$content="[Install]
QuickLaunchShortcut=false
DesktopShortcut=false
MaintenanceService=false" -replace "`n", "`r`n"
Out-File -FilePath $inf -Force -InputObject $content -Encoding ascii
Show-InstallationProgress -StatusMessage "Installing $appName $appVersion. This may take some time. Please wait..."
Execute-Process -Path "Firefox Setup 45.0.1esr.exe" -Parameters "/INI=`"$inf`"" -WindowStyle Hidden
</install>
<uninstall>
if ([IntPtr]::Size -eq 8) {$regPath="HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"} else { $regPath="HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"}
$item=Get-ItemProperty $regPath | where {$_.DisplayName -like "*Mozilla Firefox*" -and $_.DisplayVersion -eq "45.0.1"}
Execute-Process -Path ($item.UninstallString -replace "`"", "") -Parameters "/S"
</uninstall>
<detection/>
<dependency/>
<supersedence>
<deploymentType uninstall="false" type="SHA256">8CA1EC61B9DF30DDCEF3E7CE5234C2BEF6EC7C9C3A4B51F57C67FC9E8822E7FB</deploymentType><!--38.2.0-->
<deploymentType uninstall="false" type="SHA256">40DC3DF8C548819733386B70791DB753793E98C5F08283001D851A204376F017</deploymentType><!--38.2.1-->
<deploymentType uninstall="false" type="SHA256">FDC5BAA6033918E7FE8018DE130F16A23896B623B0B4F60A8EA578759C2DD29C</deploymentType><!--38.6.0-->
<deploymentType uninstall="false" type="SHA256">771A00786C69F7290A25C495A03622B4616C21D6A062BC712F55E0AE0282C219</deploymentType><!--38.6.1-->
<deploymentType uninstall="false" type="SHA256">85B1438D427FB6C9A52415BF46239AD491FD30EA410698ECDE256D0BC9AE7DB4</deploymentType><!--45.0.0-->
</supersedence>
</appdefinition>
ConfigMgr: Firefox ESR 38.6.1 verteilen
Ein weiteres Beispiel mit Supersedence wäre die aktuelle Version der Unternehmensvariante von Firefox. Es werden die letzten drei von mir vorbereiteten Versionen in die veraltete Softwareliste aufgenommen.
Download unter: https://www.mozilla.org/en-US/firefox/organizations/all/
<appdefinition>
<file>Firefox Setup 38.6.1esr.exe</file>
<hash type="SHA256">771A00786C69F7290A25C495A03622B4616C21D6A062BC712F55E0AE0282C219</hash>
<info>
<company>Mozilla Corporation</company>
<productName>Mozilla Firefox</productName>
<productversion>38.6.1</productversion>
<setupType>NSIS</setupType>
<isX86>true</isX86>
<hasUninstall>true</hasUninstall>
</info>
<install>
$inf=Join-Path $env:temp firefox.ini
$content="[Install]
QuickLaunchShortcut=false
DesktopShortcut=false
MaintenanceService=false" -replace "`n", "`r`n"
Out-File -FilePath $inf -Force -InputObject $content -Encoding ascii
Show-InstallationProgress -StatusMessage "Installing $appName $appVersion. This may take some time. Please wait..."
Execute-Process -Path "Firefox Setup 38.6.1esr.exe" -Parameters "/INI=`"$inf`"" -WindowStyle Hidden
</install>
<uninstall>
if ([IntPtr]::Size -eq 8) {$regPath="HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"} else { $regPath="HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"}
$item=Get-ItemProperty $regPath | where {$_.DisplayName -like "*Mozilla Firefox*" -and $_.DisplayVersion -eq "38.6.1"}
Execute-Process -Path ($item.UninstallString -replace "`"", "") -Parameters "/S"
</uninstall>
<detection/>
<dependency/>
<supersedence>
<deploymentType uninstall="false" type="SHA256">8CA1EC61B9DF30DDCEF3E7CE5234C2BEF6EC7C9C3A4B51F57C67FC9E8822E7FB</deploymentType><!--38.2.0-->
<deploymentType uninstall="false" type="SHA256">40DC3DF8C548819733386B70791DB753793E98C5F08283001D851A204376F017</deploymentType><!--38.2.1-->
<deploymentType uninstall="false" type="SHA256">FDC5BAA6033918E7FE8018DE130F16A23896B623B0B4F60A8EA578759C2DD29C</deploymentType><!--38.6.0-->
</supersedence>
</appdefinition>
ConfigMgr: TortoiseSVN 1.9.3 verteilen
Nachfolgend ist ein erstes Beispiel, um Supersedence Regeln automatisch erstellen zu können. Voraussetzung ist, dass die Version 1.8.11 ebenfalls mit der neuesten Version von meinem Toolkit angelegt wurde. Dann ist im DeploymentType der Hash Wert hinterlegt, an Hand der das Script die zu ersetzende Anwendung erkennt. Da es sich hierbei um ein ordentliches MSI Paket handelt, ist ein vorhergehendes Uninstall nicht notwendig und daher auf “False” gesetzt.
Das neue MSI File kann unter https://tortoisesvn.net/downloads.de.html heruntergeladen werden.
automateAppDeployment – Version 0.6
Nach langer Zeit habe ich endlich meine über Wochen entwickelte neue Version des Toolkits zur automatischen Verteilungen im ConfigMgr in der Version 0.6 zusammengestellt. Es benötigt die aktuelle ConfigMgr Powershell Version.
Folgende Punkte haben sich geändert:
0.6 – 2016-02-10
- NEW: Benutzer jetzt die neue Methode Add-CMScriptDeploymentType
- NEW: Verwendet die neue Methode -AvailableDateTime
- NEW: Hash Wert wird im Admin-Kommentar hinterlegt. Ziel ist die Verwendung als deprecated bzw. dependance
- NEW: Im XML File können deprecated Anwendungen über den Hash Wert angegeben werden, die automatisch hinterlegt werden
- NEW: Im XML File können Gruppen von dependent Anwendungen hinterlegt werden, die als Voraussetzung in der Anwendung hinterlegt werden (aktuell nur mit einer Anwendung pro Gruppe getestet)
- NEW: Neue Setupart MSP. Macht aktuell nicht viel anderes als das MSI Setup, aber extrahiert weniger aus der MSI Tabelle (da es meistens nicht gefüllt ist). Dafür nutzt es die ProductID
Download: automateAppDeployment (version 0.6) (2978 downloads )
ConfigMgr: JRE 8u71 verteilen
Update 20160130: Im Script fehlte ein kleiner Teil, daher war die Verteilung nicht in jedem Fall erfolgreich. Dies ist jetzt angepasst.
Nachdem ich im letzten Post die Verteilung von 8u66 beschrieben habe, schiebe ich direkt die Verteilung vom aktuellen 8u71 hinterher. Wie gewünscht ist es hauptsächlich das Austauschen der EXE und Anpassen der Filenamen bzw. GUIDs und Versionsnummern.
<appdefinition>
<file>jre-8u71-windows-i586.exe</file>
<hash type="SHA256">3CC0BE2A34F0989692C30F2CACB89CACFCA7159570D5FC8C1B1498C60CBC07FB</hash>
<info>
<setupType>InnoSetup</setupType>
<isX86>true</isX86>
<company>Oracle Corporation</company>
<productName>Java 8 Update 71</productName>
<msiProductCode>{26A24AE4-039D-4CA4-87B4-2F83218071F0}</msiProductCode>
</info>
<install>
Show-InstallationProgress -StatusMessage 'Installing Java JRE. This may take some time. Please wait...'
$path=join-path (join-path $env:programdata 'Oracle') 'Java'
if ((Test-Path $path) -eq $false) {
New-Item -Type Directory $path |out-null
}
new-item -type File (join-path $path 'java.settings.cfg') -force | out-null
if ($is64Bit) {
$path=join-path $envWinDir "System32\config\systemprofile\AppData\LocalLow\Oracle"
$symName=join-path $envWinDir "SysWOW64\config\systemprofile\AppData\LocalLow\Oracle"
if (Test-Path $symname) {
remove-Item -Recurse -Path $symName
}
if (-not (Test-Path $path)) {
new-item -ItemType Directory -Path $path
}
#Quelle: https://gallery.technet.microsoft.com/scriptcenter/New-SymLink-60d2531e
Try {
$null = [mklink.symlink]
} Catch {
Add-Type @"
using System;
using System.Runtime.InteropServices;
namespace mklink
{
public class symlink
{
[DllImport("kernel32.dll")]
public static extern bool CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, int dwFlags);
}
}
"@
}
Try {
$return = [mklink.symlink]::CreateSymbolicLink($SymName,$Path,1)
} Catch {
}
}
Execute-Process -Path "jre-8u71-windows-i586.exe" -Parameters "/s INSTALL_SILENT=Enable AUTO_UPDATE=Disable WEB_JAVA=Disable WEB_ANALYTICS=Disable REBOOT=Disable NOSTARTMENU=Enable SPONSORS=Disable" -WindowStyle Hidden
</install>
<uninstall>
Execute-MSI -Action Uninstall -Path "{26A24AE4-039D-4CA4-87B4-2F83218071F0}"
</uninstall>
<detection>
if ([IntPtr]::Size -eq 8) {$regPath="HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"} else { $regPath="HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"}
Get-ItemProperty $regPath | where {$_.psChildname -like "{26A24AE4-039D-4CA4-87B4-2F83218071F0}" -and $_.DisplayVersion -eq "8.0.710.15" -and $_.WindowsInstaller -eq 1}
</detection>
</appdefinition>
automateAppDeployment – Version 0.5
Das Toolkit zum automatischen Erstellen von Verteilungen im ConfigMgr ist jetzt in der Version 0.5 verfügbar.
Folgende Punkte haben sich geändert:
-
0.5 – 2015-09-29
-
NEW: MSI Product Code kann ebenfalls überschrieben werden (z.B. beim Mumble Client)
-
BUG: Fehler im InnoSetup Powershell Code korrigiert.
-
NEW: GlobalDef Variable, um nur die Dateien anzulegen und keine ConfigMgr Integration durchzuführen.
-
BUG: Falls der Files Ordner im Template noch nicht existiert, scheiterte das Kopieren.
-
BUG: Bei der neuen AppDeploymentToolkit Version wurde die Abschlussmeldung nicht mehr entfernt.
ConfigMgr: 7-zip 15.07 beta verteilen
Seit ca. 14 Tagen gibt es eine neue Beta vom beliebten 7-zip Packer.
Hier das passende XML File inkl. aktualisiertem Hash-Wert:
<appdefinition>
<file>7z1507-x64.exe</file>
<hash type="SHA256">E20B323C9FDD4C487B244309A3B8DD256B2ED0FDD13F55E1FEEC0B39B655D7FA</hash>
<info>
<company>Igor Pavlov</company>
<setupType>NSIS</setupType>
<isX86>false</isX86>
<hasUninstall>true</hasUninstall>
</info>
<install/>
<uninstall>
Show-InstallationProgress -StatusMessage "Uninstalling 7-Zip 15.07 beta. This may take some time. Please wait..."
$regPath="HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
$uninstallApp=(Get-ItemProperty $regPath | where {$_.DisplayName -like "*7-Zip 15.07 beta*"}).UninstallString.replace("`"","")
Execute-Process -Path "$uninstallApp" -Parameters "/S" -WindowStyle Hidden
</uninstall>
<detection>
$regPath="HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
Get-ItemProperty $regPath | where {$_.DisplayName -like "*7-Zip 15.07 beta*"}
</detection>
</appdefinition>