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 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>
Mögliche Probleme mit MS16-072
Kurze Warnung: Das aktuelle Security Update MS16-072 kann dazu führen, dass Benutzer-GPOs nicht mehr angewendet werden, wenn die Authentificated User die GPO nicht mehr lesen können, da die Gruppenrichtlinien nicht mehr im Benutzer sondern im Computerkontext gelesen werden und somit bei einer Lese-Einschränkung auf eine Benutzergruppe das Computerobjekt keine Rechte hat.
Ich habe es bei meinen eingeschränkten GPOs immer versucht zu vermeiden (es reicht den authent. Users das Apply Recht zu nehmen), aber ich weiss, dass einige Firmen diese “falsche” Einstellung so umgesetzt haben. Daher diese kurze Warnung von mir :)
Software Update Baselines
Automatic Deployment Rules (ADR) sind bei der Verteilung von Updates hilfreich, da sie automatisiert für jeden Monat (oder häufiger) neue Software Update Gruppen anlegen können, die nur die benötigten Updates beinhalten und somit die Gruppengrößen klein halten. Eine entsprechende Strategie habe ich bereits 2014 beschrieben. Kommt aber ein Client nach längerer Zeit wieder ans Netz, dann fehlen u.U. in den aktuellen Gruppen notwendige Updates, die erst bei der nächsten automatischen Regelabarbeitung wieder heruntergeladen werden müssen.
System Center Configuration Manager 1602
Seit zwei Tagen (11.03.2016) gibt es die offizielle Version 1602 vom ConfigMgr. Es beinhaltet einige interessante Änderungen, die ich auch in meinem letzten Vortrag angerissen habe.
Achtung: Eine direkte Installation ist nicht vorgesehen, sondern man muss zuerst das letzte Baseline Release (1511) installiert haben und kann dann direkt upgraden (dies kann auch vor dem Clientupgrade erfolgen).
Weitere Details sind hier zu finden:
ConfigMgr: Powershell Library Update
Vor einiger Zeit wurde die Powershell Library für ConfigMgr aus den Cumulative Updates herausgenommen und wird getrennt veröffentlicht. Dadurch können andere Releasezyklen genutzt werden.
Jetzt wurde vor zwei Tagen eine neue Version veröffentlicht:
Sie ist verwendbar für alle aktuellen Configuration Manager Versionen:
- System Center 2012 Configuration Manager SP2
- System Center 2012 R2 Configuration Manager
- System Center 2012 R2 Configuration Manager SP1
- System Center Configuration Manager (current branch version 1511)
Und funktioniert auch mit der aktuellen Preview. In der Preview 1601 soll sie bereits enthalten sein.
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>
ConfigMgr: JRE 8u66 verteilen
Seit längerem stört es mich, dass man für die JRE Verteilung immer noch das MSI File extrahieren muss. Das macht den Sinn vom AutomaticAppDeployment kaputt, da mehr manuelle Schritte notwendig sind.
Ursache dafür ist ein alter Bug im Oracle JRE Setup, der Probleme mit der Installation im SYSTEM Kontext von 32bit Java unter x64 Betriebssystemen hat. Der Bug ist u.a. hier dokumentiert: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7014194
Angeblich ist der Fehler bereits in 8u51 behoben. Meine Realität sieht aber anders aus.
ConfigMgr: MDT 2013 Update 1
Eine kurze Information: Seit gestern gibt es das Microsoft Deployment Toolkit (MDT) 2013 Update 1, das jetzt offiziell das ADK für Windows 10 unterstützt. Das ermöglicht jetzt die Verteilung und das Upgrade von Windows 10 mit einer Release Version von MDT.
Weitere Informationen sind in diesem Blog Artikel zu finden:
http://blogs.technet.com/b/msdeployment/archive/2015/08/17/mdt-2013-update-1-now-available.aspx
Microsoft Band Tiles mit Web Tiles erzeugen
Vor wenigen Tagen hat Microsoft die Web Tiles Seite herausgegeben. Darüber lassen sich über wenige Schritte ein neues Tile für das Microsoft Band erzeugen. Berichtet wird z.B. hier darüber http://www.drwindows.de/content/6924-neues-microsoft-band-sdk-update-web-tiles.html.
Am Beispiel eines RSS Feeds für heise.de wird dies hier vorgestellt. Man beginnt auf http://developer.microsofthealth.com/WebTile. Eine Registrierung ist nicht notwendig. Man kann somit direkt loslegen:
Als Layout bietet sich ein Multiple page tile aus, damit mehrere Nachrichten angezeigt werden kann. Zum Lesen ist der Scrolling text wrap optimal: