ConfigMgr: System Center 2012 R2 Operations Manager Console
Auch wenn bereits der OpsMgr 2016 verfügbar ist, möchte eventuell der ein oder andere noch die alte Konsole verteilen. Als Voraussetzung benötigt diese den Report Viewer 2012 und ein aktuelle .Net Framework. Beide sind entsprechend verlinkt.
<appdefinition>
<file>setup.exe</file>
<hash type="SHA256">E95135DD934B1DF1B9396CB86FA4E79F4C84B311825AD8ABED3F4CA2DE5C1CCE</hash>
<info>
<company>Microsoft Corporation</company>
<productName>System Center 2012 R2 Operations Manager Console</productName>
<setupType>NSIS</setupType>
<isX86>false</isX86>
<hasUninstall>true</hasUninstall>
</info>
<install>
Show-InstallationProgress -StatusMessage "Installing $appName . This may take some time. Please wait..."
Execute-Process -Path "setup.exe" -Parameters "/silent /install /components:OMConsole /EnableErrorReporting:Never /SendCEIPReports:0 /UseMicrosoftUpdate:1 /AcceptendUserLicenseAgreement:1"
</install>
<uninstall>
Show-InstallationProgress -StatusMessage "DeInstalling $appName . This may take some time. Please wait..."
Execute-MSI -Action Uninstall -Path "{041C3416-87CE-4B02-918E-6FDC95F241D3}"
</uninstall>
<detection>
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | where {$_.psChildname -like "{041C3416-87CE-4B02-918E-6FDC95F241D3}" -and $_.WindowsInstaller -eq 1}
</detection>
<supersedence/>
<dependency>
<dependencyGroup name="DOTNET">
<application autoInstall="true" type="SHA256">BEAA901E07347D056EFE04E8961D5546C7518FAB9246892178505A7BA631C301</application>
</dependencyGroup>
<dependencyGroup name="ReportViewer2012">
<application autoInstall="true" type="SHA256">ECCBBF99C7174E2B23C4398077C0757D1EA8A5C18D68B18A5A391DE985696A90</application>
</dependencyGroup>
</dependency>
</appdefinition>
ConfigMgr: ReportViewer 2010
Auch wenn der Report Viewer 2010 schon ziemlich alt ist, wird er teilweise noch bei manchen Konsolen benötigt. Daher hier als Prerequest das Programm:
<appdefinition>
<file>ReportViewer.exe</file>
<hash type="SHA256">E8FF182E202B321AC2B9245EE20C4EB659008FFB2A34CDBD3486F9DA3D4C3E06</hash>
<info>
<company>Microsoft Corporation</company>
<setupType>NSIS</setupType>
<isX86>true</isX86>
<hasUninstall>true</hasUninstall>
</info>
<install>
Show-InstallationProgress -StatusMessage "Installing $appName . This may take some time. Please wait..."
Execute-Process -Path "ReportViewer.exe" -Parameters "/q /c:`"install.exe /q`""
</install>
<uninstall>
Show-InstallationProgress -StatusMessage "Uninstalling $appName. This may take some time. Please wait..."
Execute-MSI -Action Uninstall -Path "{C19B3EB6-B54C-3204-A4DF-88432E0C79F7}"
</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 "{C19B3EB6-B54C-3204-A4DF-88432E0C79F7}" -and $_.WindowsInstaller -eq 1}
</detection>
<dependency/>
<supersedence/>
</appdefinition>
ConfigMgr: .Net 3.5 für Windows 2012 R2 verteilen
Anbei ein kleines Script, um für Windows 2012 R2 das .Net Framework 2-3.5 nachzuinstallieren. Dafür ist der SXS von der Installations-CD notwendig. Dafür wird die OS Language ausgelesen und verwendet, um das passende SXS Verzeichnis zu verwenden.
Somit legt man für jede notwendige Betriebssystemsprache ein Unterordner mit Namen des Laguage Codes (1031 für deutsch, 1033 für englisch, …) an und kopiert den Inhalt des jeweiligen SXS Ordners dort hinein.
Als Vergleichsfile habe ich willkürlich das microsoft.build.tasks.v3.5.dll genommen. Dies ist aber in diesem Fall nicht weiter relevant.
(Anmerkung: Ich habe den Produktnamen bewusst gekürzt, da es sonst bei den SXS Ordner beim Kopieren in die Zielordner zu Dateilängen über 256 Zeichen komme und das normale Powershell Kopierkommando damit nicht zurecht kommt)
Adobe Reader Build 30201
Auch der Acrobat Reader in der 2015 Version (nicht die “Cloud” Variante DC) wurde auf Build 30201 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),
<appdefinition>
<file>AcroRdr2015Upd1500630201_MUI.msp</file>
<hash type="SHA256">A7E71B976CD51C9A92F481BD4BCF8DD12260E522D8858C46B990BA50F56427A8</hash>
<info fromFile="true">
<company>Adobe Systems Incorporated</company>
<productName>Adobe Reader 2015</productName>
<productVersion>15.006.30201</productVersion>
<setupType>MSP</setupType>
<isX86>true</isX86>
</info>
<install fromSetupType="false">
Execute-MSI -Action Patch -Path "AcroRdr2015Upd1500630201_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-->
<deploymentType uninstall="false" type="SHA256">345351B04EE45E85194126AE0884A0B8AAC5DCEDA34D42AB18F3E6413C8D41F9</deploymentType><!--Build 30121-->
</supersedence>
</appdefinition>
ConfigMgr: 7Zip 16.02 verteilen
Scheinbar habe ich mein Script für 7-Zip 16.02 übersehen zu veröffentlichen:
<appdefinition>
<file>7z1602-x64.exe</file>
<hash type="SHA256">F1601B09CD0C9627B1AAB7299B83529E8FBC6B5078E43DFD81A1B0BFCDF4A308</hash>
<info>
<company>Igor Pavlov</company>
<setupType>NSIS</setupType>
<isX86>false</isX86>
<hasUninstall>true</hasUninstall>
</info>
<install/>
<uninstall>
Show-InstallationProgress -StatusMessage "Uninstalling 7-Zip 16.02. This may take some time. Please wait..."
$regPath="HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
$uninstallApp=(Get-ItemProperty $regPath | where {$_.DisplayName -like "*7-Zip 16.02*"}).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 16.02*"}
</detection>
<supersedence>
<deploymentType uninstall="false" type="SHA256">80BAA787724BF9BE9F6D2C3B42CBC2124CFA662DB081E2A5F885BFA60389D6FF</deploymentType><!--15.14-->
</supersedence>
</appdefinition>
ConfigMgr: Java 8 Update 101
Anbei das aktualisierte Installationsscript für Java 8u101:
<appdefinition>
<file>jre-8u101-windows-i586.exe</file>
<hash type="SHA256">8FAC3FBB9E854BCEE12049430E9EF67188C6389B46C67120E873CDF173B3C3B9</hash>
<info>
<setupType>InnoSetup</setupType>
<isX86>true</isX86>
<company>Oracle Corporation</company>
<productName>Java 8 Update 101</productName>
<msiProductCode>{26A24AE4-039D-4CA4-87B4-2F32180101F0}</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-8u101-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-2F32180101F0}"
</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-2F32180101F0}" -and $_.DisplayVersion -eq "8.0.1010.13" -and $_.WindowsInstaller -eq 1}
</detection>
<dependency>
</dependency>
<supersedence>
<deploymentType uninstall="true" type="SHA256">67C9594D2A51D6B1B52CC57CD7E1B320B491207C3680F811354185B71ED4D832</deploymentType>
<deploymentType uninstall="true" type="SHA256">8371F27009A9286CAC0D9812E0411DDBFCB106456E46FFEC50E64054E75E4632</deploymentType>
<deploymentType uninstall="true" type="SHA256">E4E54109C3FB40A36457B4EAC5C53D667A9969826EB16157B0DC4A2D3DCEAC23</deploymentType>
<deploymentType uninstall="true" type="SHA256">41F1887CBC9446720B26F51B9EDD6034D535A2F844A6E37646333F7799F35809</deploymentType>
<deploymentType uninstall="true" type="SHA256">3CC0BE2A34F0989692C30F2CACB89CACFCA7159570D5FC8C1B1498C60CBC07FB</deploymentType><!--71-->
</supersedence>
</appdefinition>
ConfigMgr: Firefox 45.3.0 ESR verteilen
Mit folgender XML Datei kann Firefox in der Version 45.3.0 ESR verteilt werden. Dabei werden automatisch ältere Versionen “supersedet”. Vorausgesetzt diese wurden auch mittels AutomateAppDeployment bereitgestellt.
<appdefinition>
<file>Firefox Setup 45.3.0esr.exe</file>
<hash type="SHA256">02FDEA888951BA9FA5740861C27A815C58151F3B64EF03E9E374AF465F20B9D7</hash>
<info>
<company>Mozilla Corporation</company>
<productName>Mozilla Firefox</productName>
<productversion>45.3.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.3.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.3.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-->
<deploymentType uninstall="false" type="SHA256">CA99927AA526C7C002C137337BFA0A1CB2C9118F8C7568F1F3B5C6DCDBAEEE08</deploymentType><!--45.2.0-->
</supersedence>
</appdefinition>
Cloud Proxy mit ConfigMgr TP 1607 einrichten
Cloud Proxy ist eine neue Funktion in 1606 Technical Preview, die mobilen Geräten eine einfache Verbindung zum ConfigMgr ermöglicht. Dabei ist On-Premise keine DMZ notwendig.
Der Cloud Proxy wird durch den ConfigMgr selber installiert. Dazu muss der Server auf das entsprechende Azure Konto zugreifen können. Klassisch und auch in diesem Fall erfolgt dies über ein Management Zertifikat. Der Public Key dieses Schlüssels wird in Azure hochgeladen und jeder mit dem Privat Key kann administrativ auf das Konto zugreifen.
Managementzertifikat erstellen
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>
Windows Server 2016 TP5 verfügbar!
Seit einigen Stunden ist die neue Beta-Version zu TP5 verfügbar.
Daher ein paar Links dazu:
Download u.a. über folgende Landing Page:
Windows Server 2016 Product Page (oder MSDN…)
https://www.microsoft.com/en-us/server-cloud/products/windows-server-2016/
Und neue Videos auf Channel9 zu den neuen TP5 Funktionen:
https://channel9.msdn.com/Blogs/windowsserver
Und noch ein kostenloses E-Book (auf den ersten Blick sehe ich aber noch keine Referenzen auf TP5):