Erstellen des Network Access Account – Configuration Manager 2012

Was könnte man an einem verregneten, gesetzlichen Feiertag in Deutschland besseres machen, als ein wenig im Configuration Manager zu skripten? Gut, es gäbe noch einige Dinge, die mir einfielen, aber meine Frau ist krank und ich habe auch gerade keine weiteren Pläne. Also…

Wo findet man die Einstellungen zum Network Access Account?

Im Internet findet man massig Fragen dazu, wo man die Optionen Network Access Account (NAA) findet. Sie verbergen sich unter „Configure Site Components“ und dort unter den "Software Distribution Component Properties“.

.

image

Es ist also nicht sooo kompliziert ;)
Bei meinem gestrigen Waldlauf habe ich mir dann aber gedacht, dass das alles doch wunderbar in ein Skript verpackt werden könnte und das habe ich dann heute auch gemacht.

Zwei Schritte zum Erfolg

Natürlich bringt der Configuration Manager weder ein CMDlet noch eine WMI-Klasse zum Erzeugen des NAAs mit. Das müsst ihr in ein, zwei  Schritten selber machen.

Schritt eins: Anlegen des Benutzers

Während man den neuen oder bereits existierende Benutzer für den NAA über die Konsole sehr einfach anlegen kann, ist per Skript nicht so simpel.

Zunächst benötigt man einen Benutzer, der später zum NAA wird. Dieser Benutzer kann jeder Domänenbenutzer sein, der Zugriff auf die Quellen / den Distribution Point hat (About the Network Access Account (Microsoft Technet)). Das Passwort des anzulegenden Benutzers muss verschlüsselt werden, wozu ihr eine WMI-Methode der Klasse SMS_Site verwendet (EncryptDataEx).

Anschließend verwenden wir eine WMI-Klasse die, selbst Microsoft zu dokumentieren vergessen hat: SMS_SCI_Reserved. Mit dieser Klasse erstellen wir eine neue Instanz, die später unser neuer Benutzer wird. Die Informationen über diese Klasse habe ich aus dem SMSProv.log. Dort findet ihr nahezu alle Informationen, die den SMS-Provider betreffen.

Schritt zwei: Erstellen des Network Access Accounts 

Im nächsten Schritt muss der neue Nutzer verwendet werden, um aus ihm den NAA zu erstellen. Dies erreichen wir durch Verwendung der WMI-Klasse SMS_SCI_ClientComp. Diese Klasse beschreibt alle Clientkomponenten eurer Site, wie z.B. “Software Updates”, “System Health Agent” und “Software Distribution“. Letztere ist die von uns benötigte Komponente. Jedes Bestandteil dieser Klasse hat Eigenschaften, oder in diesem Falle so genannte „Props“, die von der Klasse „SMS_EmbeddedProperty“ zusammengefasst werden. Jetzt müssen wir nur noch die richtigen Werte in die richtigen Props einsetzen und schon wars das.

Anschließend könnt ihr über die GUI oder über das Powershell CMDlet „Get-CMAccount“ prüfen, ob das Anlegen funktioniert hat:

image

image

Hier ist das fertige Skript. Wie immer gilt: Bei Fragen und Anmerkungen, gerne hier oder auf Twitter (@David_Obrien) melden!

#######
# Purpose: This script creates a new user in your Microsoft System Center Configuration Manager 2012 Site and makes it your Network Access Account
#
# Author: David O'Brien, david.obrien@sepago.de
#
# Created: 03.10.2012
#
#######
 
param (
[string]$SiteCode,
[string]$UserDomain,
[string]$UserName,
[string]$unencryptedPassword
)
 
#encrypt the Password
$SMSSite = "SMS_Site"
$class_PWD = [wmiclass]""  
$class_PWD.psbase.Path = "ROOT\SMS\site_$($SiteCode):$($SMSSite)" 
$Parameters = $class_PWD.GetMethodParameters("EncryptDataEx")
$Parameters.Data = $unencryptedPassword
$Parameters.SiteCode = $SiteCode
$encryptedPassword = $class_PWD.InvokeMethod("EncryptDataEx", $Parameters, $null)
 
# create the user in your site as a site local user account
$SMSSCIReserved = "SMS_SCI_Reserved"
$class_User = [wmiclass]""
$class_User.psbase.Path ="ROOT\SMS\Site_$($SiteCode):$($SMSSCIReserved)"
 
$user = $class_User.createInstance()
$user.ItemName = "$($UserDomain)\$($UserName)|0"
$user.ItemType = "User"
$user.UserName = $UserDomain+"\"+$UserName
$user.Availability = "0"
$user.FileType = "2"
$user.SiteCode = $SiteCode
$user.Reserved2 = $encryptedPassword.EncryptedData.ToString()
$user.Put() | Out-Null
 
# make the created user account your new Network Access Account
$component = gwmi -class SMS_SCI_ClientComp -Namespace root\sms\site_$SiteCode  | Where-Object {$_.ItemName -eq "Software Distribution"}
$props = $component.Props
$prop = $props | where {$_.PropertyName -eq "Network Access User Name"}
    
$prop.Value = 0
$prop.Value1 = "REG_SZ"
$prop.Value2 = $UserDomain+"\"+$UserName
    
$component.Props = $props
$component.Put() | Out-Null