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)
<appdefinition> <file>microsoft.build.tasks.v3.5.dll</file> <hash type="SHA256">DDC3B09E15C565FA1E10562FE0FF13FB4612D5F486362A58E4EDE65E13FEE7C5</hash> <info> <company>Microsoft Corporation</company> <productName>NET Framework</productName> <productVersion>3.5</productVersion> <setupType>NSIS</setupType> <isX86>false</isX86> <hasUninstall>true</hasUninstall> </info> <install> Show-InstallationProgress -StatusMessage "Installing $appName . This may take some time. Please wait..." $osLanguage=(get-wmiobject Win32_OperatingSystem).osLanguage Execute-Process -Path "dism.exe" -Parameters "/online /enable-feature /featurename:NetFX3 /all /Source:$dirFiles\$osLanguage /LimitAccess /LogPath:$configToolkitLogDir\$installName-dism.log" </install> <uninstall> Show-InstallationProgress -StatusMessage "Uninstalling $appName. This may take some time. Please wait..." Execute-Process -Path "dism.exe" -Parameters "/online /disable-feature /featurename:NetFX3 /LimitAccess /LogPath:$configToolkitLogDir\$installName-dism-remove.log" </uninstall> <detection> $regPath="HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\*" if (test-path $regPath) {Get-ItemProperty $regPath | where {$_.Install -eq 1}} </detection> <supersedence> </supersedence> </appdefinition>
Pingback: ConfigMgr: Softwarepaketierung Übersicht | Markus Bäker