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) (1)

Posted in automateAppDeployment, Configuration Manager, Deutsch, Powershell, System Center | Tagged , , | Leave a comment

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:

http://blogs.technet.com/b/configmgrteam/archive/2016/01/25/winter-2016-update-for-the-sc-configmgr-cmdlet-library.aspx

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.

Man kann die aktuelle Version 5.0.8328.1155 unter folgenden Link herunterladen:

https://www.microsoft.com/en-us/download/details.aspx?id=46681

Eine Überprüfung der Version ist auch in der ConfigMgr Powershell mittels get-cmCmdletUpdateCheck möglich:

image

Hier zeigt er noch die alte Version an. Ein Send-CMCmdletUpdateCheck überprüft direkt auf eine neue Version:

image

Details dazu auch unter https://technet.microsoft.com/en-us/library/dn958404%28v=sc.20%29.aspx

Posted in Configuration Manager, Powershell, System Center | Tagged , , , , | Leave a comment

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>

 

Posted in Configuration Manager, Deutsch, Powershell, System Center | Tagged , , , | Leave a comment

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.

Ein guter Workaround ist in folgendem Technet Thread beschrieben:

https://social.technet.microsoft.com/Forums/de-DE/8dc5f284-a9a1-409b-8656-87e265ae652c/problem-with-java-18-update-31-deployment?forum=configmanagerapps

Diese Hardlinks im Dateisystem habe ich in dem nachfolgenden applicationDeployment Script genutzt (basierende auf dem Powershell Code von hier https://gallery.technet.microsoft.com/scriptcenter/New-SymLink-60d2531e)

Dadurch kann direkt die EXE installiert werden.

<appdefinition>
<file>jre-8u66-windows-i586.exe</file>
<hash type="SHA256">67C9594D2A51D6B1B52CC57CD7E1B320B491207C3680F811354185B71ED4D832</hash>
<info>
    <setupType>InnoSetup</setupType>
    <isX86>true</isX86>
    <company>Oracle Corporation</company>
    <productName>Java 8 Update 66</productName>
    <msiProductCode>{26A24AE4-039D-4CA4-87B4-2F83218066F0}</msiProductCode>
</info>
<install>
Show-InstallationProgress -StatusMessage 'Installing Java JRE. This may take some time. Please wait...'
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-8u66-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-2F83218066F0}"
</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-2F83218066F0}" -and $_.DisplayVersion -eq "8.0.660.18" -and $_.WindowsInstaller -eq 1}
</detection>
</appdefinition>
Posted in Configuration Manager, System Center | Tagged , , , , , | Leave a comment

Danke für den MVP Award für 2016!

Zu meiner Überraschung habe ich am 1.1.2016 folgende Email erhalten:

image

Ich nehme dies als Ansporn mehr Energie in meine Community Kanäle zu legen!

Posted in Deutsch, English | Leave a comment