Blog Archives

SCCM2012SP1 – Change Package Source Path

In manchen SCCM Migrationen kann es sowohl sinnvoll als auch erforderlich sein die Quellpfade von Paketen anzupassen. Bei einigen wenigen Paketen kann diese Aufgabe über die SCCM Konsole erledigt werden. Was ist aber wenn alle Quelldaten auf einen anderen Fileserver und dort auf ein neues Share umgezogen wurden? Wie macht man so etwas bei vielen hundert Paketen am besten?

Aufgrund der genialen PowerShell-Integration in SCCM 2012 SP1, nehmen wir doch diese! Gesagt, getan! Skript geschrieben! Da die Skript-Kommentare das Skript erklären, werde ich auf Redundanzen verzichten und an dieser Stelle nichts weiter erklären. 😉

##############################################
#Author: E. Kleefeldt
#Date: 27.05.2013
#Titel: MovePackageFileSourceLocation
#Description: Move Packages Source Location from $Src to $Dest
#Version History:
#27.05.2013 V 1.0 Created
##############################################
write-host "Script muss mit PowerShell x86 ausgefuehrt werden!" -foreground yellow
write-host "Die ExecutionPolicy muss auf unrestricted gesetzt sein." -foreground yellow
write-host "Im Vorfeld müssen die Pfade in den Variablen definiert werden." -foreground yellow
write-host "Die Ausführung wird jetzt beginnen." -foreground green
#Grundlegender Input
$sitecode='EKL:' #Don't forget the colon!
$cmmodule='C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1'
#Import CM2012-Module
Import-Module $cmmodule
Set-Location $sitecode
#Quell/Zielpfad
$src='\\ws08fs01\packages$'
$des='\\ws12fs01\SourceFiles$'
write-host "Package Name holen." -foreground yellow
# AUSGABE PFAD NEU (Preview des Ergebnisses)
Get-CMPackage | ForEach-Object {write $_.PkgSourcePath.replace($src,$des)}
# ANPASSUNG DER PFADE
# Auskommentieren, wenn Preview erfolgreich
# Get-CMPackage | ForEach-Object {Set-CMPackage -Name $_.Name -path $_.PkgSourcePath.replace($src,$des)}
write-host "Package Location Change abgeschlossen." -foreground Yellow
write-host "Ergebnis prüfen." -foreground Yellow

Mit etwas Kreativität kann das Skript angepasst werden, damit die Quellpfade von Deployment Types ebenso angepassst werden.

Aktivieren von inkrementellen Updates

Einer des wohl schönsten Neuerungen von SCCM 2012 SP1 ist die PowerShell-Integration. Trotz allem fehlen an der ein oder anderen Stelle noch Optionen, um wirklich alles per ConfigMgr Cmdlets steuern zu können. So können inkrementelle Updates für Collections nicht per Set-CMDeviceCollection cmdlet einfach aktiviert werden.

SCCM 2012 SP1 Device Collection Wizard

SCCM 2012 SP1 Device Collection Wizard

Mit Hilfe von inkrementellen Updates wird immer nur das Delta erfasst und in die jeweilige Collection aufgenommenen. Angenommen wir haben seit ein paar Minuten neue Computerobjekte durch den Active Directory Group Discovery Prozess erfasst und damit in der Site Datenbank. So können wir durch setzen des Hakens periodisch die neuen Objekte in die Collection aufgenommen bekommen. Wenn wir den Haken nicht setzen, werden die Objekte erst bei einem geplanten vollständigen Update erfasst. Was heißt nun periodisch?

SCCM 2012 SP1 Incremental Update Period

SCCM 2012 SP1 Incremental Update Period

Periodisch heißt standardmäßig alle fünf Minuten.

Was ist aber nun, wenn wir mehrer hundert oder gar tausend Collections in unserer SCCM-Umgebung haben? Wie können wir diesen Haken dann bei allen Collections setzen bzw. sicherstellen, das der Haken für inkrementelle Updates bereits gesetzt wurde? Wir nehmen die PowerShell und arbeiten alle Collections mit einer ForEach-Object-Schleife ab. 10 Minuten anstatt 10 Tage exzessive Mausklickerei. 😉

Um den Haken für alle Device Collections zu setzen habe ich folgendes Script geschrieben:

##################################
#Enable Incremental Updates
#SCCM 2012 SP1 Collections
#V1.0 2013-05-08 Erik Kleefeldt
#PowerShell x86 verwenden!
#Set-ExecutionPolicy Unrestricted -Force needs to run first
##################################
#Basic Input
#Siteserver,Sitecode,Install Dir for the Admin UI (not CM12 install dir)
 $siteserver='WS12APP1'
 $sitecode='F01:' #Don't forget the colon!
 $cmmodule='C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1'
#Import CM2012-Module
 Import-Module $cmmodule
 Set-Location $sitecode
#Acitvate each DeviceCollection for incremental Updates if it's not already active 
 Get-CMDeviceCollection | ForEach-Object {
 $temp=[String]::format("\\{0}\root\sms\site_{1}SMS_Collection.CollectionID='{2}'",$siteserver,$sitecode,$_.CollectionID)
 $a=[wmi] $temp 
 if ($a.IsBuiltIn -ne $true) {
 $a.RefreshType=6
 $a.put() > $null
 write-host "Update for" $a.Name "is now activated." -foregroundcolor green
 }
 }

write-host "Incremental Updates for all device collections is now enabled!" -foregroundcolor yellow
...

In diesem Script werden nur Device Collections modifiziert. Damit wir auch User Collections genauso anpassen können, muss lediglich das ConfigMgr Cmdlet “Get-CMDeviceCollection gegen Get-CMUserCollection ausgetauscht werden.

#Acitvate each UserCollection for incremental Updates if it's not already active 
 Get-CMUserCollection | ForEach-Object {
 $temp=[String]::format("\\{0}\root\sms\site_{1}SMS_Collection.CollectionID='{2}'",$siteserver,$sitecode,$_.CollectionID)
 $a=[wmi] $temp 
 if ($a.IsBuiltIn -ne $true) {
 $a.RefreshType=6
 $a.put() > $null
 write-host "Update for" $a.Name "is now activated." -foregroundcolor green
 }
 }

write-host "Incremental Updates for all user collections is now enabled!" -foregroundcolor yellow
C:

Das war’s auch schon!

SCCM 2012 SP1 Incremental Update activated

SCCM 2012 SP1 Incremental Update activated

Scripting in Windows

Momentan beschäftige ich mich mit Skripting. An dieser Stelle möchte ich ein gutes Buch vorstellen, das ich aktuell lese. Der Titel des Buches ist Windows Scripting lernen (Von Windows Script Host und Visual Basic Script bis zur PowerShell) von H. Schwichtenberg und bei Addison-Wesley, 4.te Auflage, ISBN: 978-3-8273-2910-3.

Das Buch deckt Grundlagen ab und bietet meiner Ansicht nach ein fundierte Scripting Grundlage mit sehr viel Praxisbeispielen. Neben den vielen Beispielen und Erläuterungen liegt eine CD mit Scripten und zusätzlichen Werkzeugen vor. Damit kann interaktiv gelesen werden: Lesen + Üben. 😉

%d bloggers like this: