September 16

App Symbole im neuen Softwarecenter

Mit dem ConfigMgr Current Branch (Version 1606) kam auch das neue Softwarecenter ("ClientUX") auf die Clients welches in der Standard Ansicht die Anwendungen mit großen Symbolen, ähnlich zur Windows 10 Kacheloptik, darstellt. Wenn man in der Vergangenheit hier keine sauberen Icons bei den Anwendungen gepflegt hat, schaut das nach der Migration eher unschön aus:


swcenter1

 

Der ConfigMgt unterstützt neben Icons (.ICO oder eingebundene Symbole aus .DLL oder .EXE) auch Bilddateien in den Formaten .JPG, .JPEG und .PNG bis zu einer Größe von 250×250 Pixeln:

          swcenter2     swcenter3     swcenter4
 

Ergebniss:

swcenter5

September 16

PXE Boot Optimierung

Beim gestrigen System Center User Group (#SCUG) Treffen im München hielt André Picker einen Vortrag über OS-Deployment mit dem ConfigMgr. Ein Teil davon ging um das Thema PXE Boot und wie man hier optimieren kann.

Technisch bedeutet PXE Boot beim ConfigMgr, dass der Client ein Windows Preboot Environment (WinPE) Image per TFTP herunterläd und dann davon startet um die eigentliche Betriebssysteminstallation durchzuführen. Hier gibt es einige Stellschrauben, konkret die TFTP Block Size und die TFTP Windows Size.

Die ConfigMgr Standartwerte sind eine WindowsSize von 4 und eine BlockSize von 1024 Bytes. Damit dauert der Startvorgang mit einem HP Testnotebook bis zur Abfrage des Task Sequence Passwortes knapp 80 Sekunden.

pxeboot

Davon ausgehend habe ich einige Werte getestet und konnte das beste Ergebniss mit 8192 Byte Blöcken und 8 Chunks erhalten, die Bootzeit ging auf ca. 35 Sekunden zurück. Leider stellte sich dann aber heraus, dass VMware ESX mit einer Blockgröße >1432 Bytes Probleme bekommt. Bei Verwendung eines E1000 Adapters bricht das PXE mit einer "A required device isn't connected or can't be accessed" ab, mit einem VMXNET3 Adapter um kommt stattdessen "The application or operating system couldn’t be loaded because a required file is missing or contains error".

Als ein funktionierender Kompromiss für meine Umgebung hat sich eine Windows Size von 6 und eine Blocksize von 1024 herausgestellt womit Virtuelle Maschinen noch sauber vom Netzwerk starten und das Testnotebook bereits nach 44 Sekunden bei der TS-Passwort Abfrage steht. Manches mal muss man auch mal mit etwas zufrieden sein… ;-)

 

Gesetzt werden die Werte direkt auf dem entsprechenden Distribution Point in der Registry wo zwei neue DWORD (32bit) Schlüssel gesetzt werden müssen:

Name: RamDiskTFTPWindowsSize
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\DP
Values: 4 (Default), 8

Name: RamDiskTFTPBlockSize
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\DP
Values: 1024 (Default), 2048, 4096, 8192, 16384

registry

 

Wenn die Änderungen nicht gleich übernommen werden dann muss ggf. der WDS Dienst (Windows Deployment Services Service) neu gestartet werden.

 

Weiterführende Informationen:

September 9

Configuration Manager 1606 – Update Rollup 1 (KB3186654)

Microsoft hat das Update Rollup 1 für den ConfigMgr 1606 veröffentlicht welches über den "Updates and Servicing" Note in der Konsole bereitgestellt wird.

sccmservicing

Unter anderem wird ein Bug behoben, der dafür sorgt dass bereits bearbeitete EPP Dateien (\EpMgr.box\process) nicht automatisch gelöscht werden. Außerdem können nun Task Sequenzen importiert werden, welche einen "Install Software Updates" Step beinhalten. 

September 7

OSD über das Softwarecenter bricht ab

Nach der Umstellung auf den aktuellen ConfigMgr 1606 haben wir festgestellt, dass OSD via PXE funktioniert aber beim Start aus dem Softwarecenter heraus abbricht. Es kommt folgende Fehlermeldung:

 "Windows PE initialization failed with error code 0x80220014"

Die Ursache liegt hier am Windows 10 ADK und von Microsoft gibt es dazu ein Hotfix:

Windows PE boot images don't initialize in System Center Configuration Manager

August 24

DP Content Status – Restart might be required

In einer neuen ConfigMgr Current Branch (1602) Umgebung meldete ein Distribution Point seit Tagen dass ein Neustart von nöten wäre:

1
Distribution Point Configuration Status – SMS Client – Restart might be required

Über die Zeit sollten Meldungen an dieser Stelle durch die Wartungsaufgaben verschwinden. Alternativ dazu kann man hier auch in die Datenbank eingreifen:

2
select * from dbo.DistributionStatus where InsStr2 = ‚3010‘

3
select from dbo.DistributionStatus where ID = …

Damit verschwindet die Meldung und der Distribution Point meldet wieder einen grünen Daumen nach oben. Direkte Datenbankeingriffe bei SCCM werden von Microsoft nicht unterstützt, ein ordentliches Datenbank/Server Backup sollte vorhanden sein!

4

Juli 19

Scheduled Content Distribution

Idealerweise verlegt man größere Content Distribution Jobs ausserhalb der Geschäftszeiten um die Beeinträchtigung für die Enduser zu minimieren. Das bedeutete in der Vergangenheit für mich, dass ich mich regelmässig Nachts und am Wochenende per VPN aufgeschalten habe um Jobs zu starten. Inzwischen löse ich das mit einem super Powershell Script von Trever Jones: ConfigMgr Package Distribution Scheduler and Monitor.

19-07-_2016_08-34-57

Mit dem Script kann man einfach Tasks anlegen, um Inhalte zu einer gewissen Uhrzeit zu verteilen. Das Script sendet selbst dann noch Emails wenn die Aufgabe los rennt bzw. wenn sie abgeschlossen ist. Eine ausführliche Erläuterung aller Funktionen findet ihr im Blog von Travor: https://smsagent.wordpress.com/2014/10/27/schedule-and-monitor-configmgr-package-distributions-with-powershell/

Mai 23

Windows 7 „SP2“ ISO erzeugen

Statt einem "echten" Service Pack 2 hat Microsoft ein sogenanntes Convenience Rollup KB3125574 für Windows 7 Service Pack 1 veröffentlicht. Dieses kumulative Update liefert alle Updates für Windows 7 SP1 bis April 2016, jedoch nicht für Middleware wie .NET Framework oder die C++ Runtimes.

Das KB3125574 ist nur direkt im Windows Update Katalog erhältlich, hier sind die direkt Links:

 

Wie auch bei früheren Service Packs kann man auch dieses Update Rollup in das Windows 7 ISO einbinden, Stichwort "slipstream".

Dazu benötigt ihr neben dem KB3125574 und einem Win7SP1 ISO natürlich das Windows AIK und das April 2015 “Servicing Stack” Update KB3020369.

 

Quick and Dirty "How to slipstream"

Schritt 1: Windows 7 SP1 ISO nach C:\Win7SP1ISO entpackacken, die Updates nach C:\Updates kopieren

Schritt 2: WIM entpacken:

Dism /Mount-WIM /WimFile:C:\Win7SP1ISO\sources\install.wim /Name:"Windows 7 ENTERPRISE" /MountDir:C:\Win7SP1ISO\offline

Schritt 2: Beide Updates einspielen:

Dism /Image:C:\Win7SP1ISO\offline /Add-Package /PackagePath:C:\updates\Windows6.1-KB3020369-x64.msu
Dism /Image:C:\Win7SP1ISO\offline /Add-Package /PackagePath:C:\updates\windows6.1-kb3125574-v4-x64_2dafb1d203c8964239af3048b5dd4b1264cd93b9.msu

Schritt 3: Commit ausführen:

Dism /Unmount-WIM /MountDir:C:\Win7SP1ISO\offline /Commit

Schritt 4: ISO per WAIK erstellen: (optional)

oscdimg -n -m -bC:\Win7SP1ISO\boot\etfsboot.com C:\Win7SP1ISO\ C:\Windows7Updated.iso

 

Pfade/Dateinamen bitte ggf. anpassen… :-)

April 28

User State Migration schlägt fehl – DismApi.DLL fehlt

Problem: Während einer ConfigMgr 2012 R2 Task Sequence crashed das User State Migration Tool (USMT) mit einem Fehler, weil die DismApi.DLL nicht auf dem Zielrechner vorhanden ist:

Error_USM

Lösung: Die fehlenden Dateien müssen in das USM Package kopiert werden.

Diese sollten sich auf dem dem Server mit dem installierten Windows Assessment and Deployment Toolkit (ADK) befinden, normalerweise unter %programfiles(x86)\Windows Kits\10\Assessment and Deployment Tools\amd64\DISM (für 64bit).

Die dann in den Source Ordner des USM Package kopieren und dieses dann im ConfigMgr neu einlesen.

Error_USM2

Folgende Dateien müssen kopiert werden:

  • dismapi.dll
  • api-ms-win-downlevel-advapi32-l1-1-1.dll
  • api-ms-win-downlevel-kernel32-l1-1-0.dll
  • api-ms-win-downlevel-kernel32-l2-1-0.dll
  • api-ms-win-downlevel-ole32-l1-1-1.dll
  • api-ms-win-downlevel-user32-l1-1-1.dll
  • api-ms-win-downlevel-version-l1-1-0.dll

 

Siehe Microsoft KB3084782

April 7

VDI Maintenance Mode Switcher Powershell Script

Problem: VDI Maschinen in unserer Farm werden bei Inaktivität heruntergefahren und nur bei Bedarf gestartet. Dadurch kann es vereinzelt Maschinen geben, die nur sehr selten Online sind. Daher fehlen hier aktuelle Polices, Patches und Softwarepakete.

Lösung: Ich habe ein PowerShell Script geschrieben, welches über den Aufgabenplaner am Wochenende ausgeführt werden kann. Das Script aktiviert/deaktiviert den Maintenance Mode und (neu-)stratet die entsprechenden Maschinen.

Mal sehen ob sich das bewährt… :-)
Dies ist so nebenbei auch mein erstes handgeklöppeltes Powershell Script, für Fehler übernehme ich keine Haftung.

 

VDI_MM_Switcher_v1.4.ps1

<#
.SYNOPSIS
    This script enable or disable Maintenance Mode for Citrix VDI machines.
.DESCRIPTION
    The script read a static text file with hostnames and enable or disable maintance mode for each machine.
    The script will wait 60 seconds after each machine.
    If a target VDI is powered off it will be started automatically, if a target VDI is powered on it will be restarted if not in use.
.PARAMETER MaintenanceMode
    Specifies if the Maintenance Mode should be switched on or off. Options: Enable, Disable.
.PARAMETER HostListFile
    List of target Host names without Domain.
.EXAMPLE
    powershell.exe '.\VDI_MM_Switcher_v1.4.ps1' -MaintenanceMode "Enable" -HostListFile "C:\VDI_MM_Switcher\hosts.txt"
.EXAMPLE
    powershell.exe '.\VDI_MM_Switcher_v1.4.ps1' -MaintenanceMode "Disable" -HostListFile "C:\VDI_MM_Switcher\hosts.txt"
.NOTES
    Change Log
    V1.0 - 05.04.2016 - Manuel Kuss - frist release
    V1.1 - 05.04.2016 - Manuel Kuss - added logging
    V1.3 - 06.04.2016 - Manuel Kuss - added param()
    V1.4 - 07.04.2016 - Manuel Kuss - added SummaryState check
.LINK 
    http://www.nova17.de
#>

param(
    [string]$MaintenanceMode,
    [string]$HostListFile
)

Clear

## Load Addins
Add-PSSnapin Citrix.*

## Syntax Checker
If (($MaintenanceMode -eq "") -or ($HostListFile -eq "")) {
    Write-Host "ERROR MISSING PARAMETER`nSyntax: .\VDI_MM_Switcher_v1.4.ps1 -MaintenanceMode `"Enable/Disable`" -HostListFile `"C:\Path\hosts.txt`"" -ForegroundColor Red
    Exit
} 

## Variables (customize)
$AdminServer = 'hostname.domain.tld'
$ADDomain = 'YOUR-AD-DOMAIN'
## Variables
$HostList = Get-Content $HostListFile
$Logfile = "$HostListFile" + "_$MaintenanceMode" + ".log"

## Output
Write-Host "Executing..." -ForegroundColor Yellow
$starttime = Get-Date -Format G
write "--------------------------------------------------------" | Out-File $Logfile
Write "Script Start Time: $starttime" | Out-File $Logfile -Append
write "--------------------------------------------------------" | Out-File $Logfile -Append

## Enable Maintenance Mode Loop ##
if ($MaintenanceMode -eq 'Enable') 
    {
    foreach ($item in $HostList)
        {
            ## Write DOMAIN\HOSTNAME to $TargetVDI
            $TargetVDI = "$ADDomain" + "\" + "$item"
            
            ## Enable Maintenance Mode
            Write "Enable MaintenanceMode for $TargetVDI" | Out-File $Logfile -Append
            Set-BrokerMachineMaintenanceMode -InputObject $TargetVDI $true -adminaddress $AdminServer

            ## Restart if TargetVDI is not in use
            foreach ($item in Get-BrokerDesktop | Where-Object{($_.MachineName -eq "$TargetVDI") -and ($_.PowerState -eq "On") -and ($_.SummaryState -ne "InUse")} | Select-Object -Property MachineName)
                { New-BrokerHostingPowerAction -MachineName $TargetVDI -Action Restart -adminaddress $AdminServer | Out-File $Logfile -Append }

            ## If TargetVDI is powered off
            foreach ($item in Get-BrokerDesktop | Where-Object{($_.MachineName -eq "$TargetVDI") -and ($_.PowerState -eq "Off")} | Select-Object -Property MachineName)
                { New-BrokerHostingPowerAction -MachineName $TargetVDI -Action TurnOn -adminaddress $AdminServer | Out-File $Logfile -Append }
            
            ## Pause
            Write "--------------------------------------------------------" | Out-File $Logfile -Append
            Start-Sleep 60
        }
    }

## Disable Maintenance Mode Loop ##
if ($MaintenanceMode -eq 'Disable') 
    {
    foreach ($item in $HostList)
        {
            ## Write DOMAIN\HOSTNAME to $TargetVDI
            $TargetVDI = "$ADDomain" + "\" + "$item"
          
            ## Disable MaintenanceMode
            Write "Disable MaintenanceMode for $TargetVDI" | Out-File $Logfile -Append
            Set-BrokerMachineMaintenanceMode -InputObject $TargetVDI $false -adminaddress $AdminServer
            
            ## Restart if TargetVDI is not in use
            foreach ($item in Get-BrokerDesktop | Where-Object{($_.MachineName -eq "$TargetVDI") -and ($_.PowerState -eq "On") -and ($_.SummaryState -ne "InUse")} | Select-Object -Property MachineName)
                { New-BrokerHostingPowerAction -MachineName $TargetVDI -Action Restart -adminaddress $AdminServer | Out-File $Logfile -Append }
                           
            ## Pause
            Write "--------------------------------------------------------" | Out-File $Logfile -Append
            Start-Sleep 60
        }
    }

## Output
$endtime = Get-Date -Format G
Write "Script End Time: $endtime" | Out-File $Logfile -Append
write "--------------------------------------------------------" | Out-File $Logfile -Append
Write-Host "Script Execuded." -ForegroundColor Yellow
April 4

Let’s Encrypt bei All-Inkl

All-Inkl.com hat als Beta Test LET'S ENCRYPT eingebunden. Somit kann nun direkt über das KAS Backend ein Let's Encrypt Zertifikat pro Domain kostenlos ausgestellt werden. Die Zertifikate sind jeweils immer 90 Tage gültig und werden automatisch verlängert, d.h. es ist kein weiterer manueller Eingriff notwendig. Der Bestell-/Einbindevorgang ist denkbar einfach:

Zu bearbeitende Domain ausw&auml;hlen
Zu bearbeitende Domain ausw&auml;hlen
SSL Schutz bearbeiten
SSL Schutz bearbeiten
Let's Encrypt ausw&auml;hlen und Hinweise lesen
Let’s Encrypt ausw&auml;hlen und Hinweise lesen
Dann wird das Zertifikat beantragt und eingebunden
Dann wird das Zertifikat beantragt und eingebunden

Es werden starke 2048 Bit Zertifikate mit allem und scharf eingebunden, daher an All-Inkl.com: Alles richtig gemacht!

le5