Der Administration Service im Configuration Manager ermöglicht API (Fern-)Zugriff, auf die Site Datenbank und somit den Zugriff über HTTPS auf fast alle Elemente einer ConfigMgr Site. Das ist möglich, weil der Code nicht auf dem Site Server ausgeführt wird, sondern via REST API Service über HTTPS erfolgt und so den Zugang zur Site Datenbank ermöglicht.
Zu theoretisch? Dann geht’s auch praktischer:
Zum Beispiel:
- Das Editieren des Adobe Reader Packages via HTTPS
- Das Erlauben eines Application Requests via E-Mail (URL approval)
Oder für Reports:
- Zugriff von Site Daten via PowerBI über den OData Connector
…Oder wie in unserem heuten Code-Sample erarbeitet:
- Das Importieren eines neuen Geräts sowie das Hinzufügen von Machine Variablen, zu diesem, neuen Gerät.
Hier findet ihr das Script auf Github:
<<Setzen von Machine Variablen via Configuration Manager – Administration Service>>
Im oben verlinkten Script liegt der Kernpunkt darin, dass der Code ohne DCOM/RPC-Zugriff auf die Site auskommt und ausschliesslich über HTTPS eine Connection zur Site Datenbank getätigt wird. D.h Es wird ausschliesslich über das Json-Format und HTTPS gearbeitet (keine WMI-Objekte im Script).
Zusätzlich sind diese Thematiken im Script interessant:
- Erhalten und Setzen von Configuration Manager Lazy Properties (ohne WMI Objekt)
- Ausführen einer statischen WMI Methode via HTTPS / Admin Service (ImportMachineEntry)
Hintergrund
Einige Properties von Config Mgr Objekten sind sogenannte «lazy properties». Sie beinhalten zwar Daten, sind jedoch leer als Resultat in einem Query Builder. Sie haben einen null oder zero Wert. Die Lazy Properties können beispielsweise mit einem WMI Explorer eingesehen werden:
Wie es nicht geht:
WMI Lazy properties werden nicht im XML zrückgegeben bei der Benutzung eines Filters.
„https://<SiteServer>/AdminService/wmi/SMS_Application?&filter=LocalizedDisplayName eq ‚appname'“
Wie es geht:
Ein Ausführen von «GetInstance» ist nötig für das Erhalten dieser Werte und somit eben das Erhalten der Objekt-Instanz selbst. Typischerweise sind jegliche Beispiele davon auf Basis einer WMI Connection (im Managed Code via WqlConnectionManager). Was, wenn man nun eben auf eine WMI Connection verzichten möchte im Zusammenhang mit dem Admin Service?
Ein «GetInstance» (oder eben ein Get) wird so initialisiert im Admin Service:
https://SiteServerfqdn/AdminService/wmi/SMS_Application(12345678)
Ein weiteres Beispiel ist in unserem Code-Beispiel auf Zeile 40 ersichtlich:
$MachineSettings=(Invoke-RestMethod -Method ‚Get‘ -Uri „https://$($CMProvider)/AdminService/wmi/SMS_machinesettings($DeviceID)“ -Credential $Cred).value
So erhält man das ganze Objekt inklusive den Lazy Properties:
Nach Erhalt der Lazy Properties können diese verarbeitet werden. In unserem Fall habe ich die „Machine Variablen“ Collection bearbeitet, indem ich dem Device neue hinzufüge. Danach muss der POST Auftrag (also das zurückschreiben in die Site DB via Admin Service) in ein gültiges Json-Format konvertiert werden. Im Script gelöst auf Zeile 61 via ConvertTo-Json, welches auf einem x-beliebigen .NET Objekt zur Verfügung steht.
Auf Zeile 70 findest ihr den POST, also den Import der Machine Variables (lazy Properties) mit Hilfe der statischen Methode «SMS_Site.ImportMachineEntry».
$machine = Invoke-RestMethod -Method Post -Uri https://$($CMProvider)/AdminService/wmi/SMS_Site.ImportMachineEntry -Body „{`“NetbiosName`“: `“$devicename`“, `“MACAddress`“: `“$mac`“}“ -ContentType ‚application/json‘ -Credential $Cred
Happy Coding!
———————————————————————-
Wen die Thematik tiefer interessiert, hier einige Details
Grundlagen:
- Der SMS Provider ist ein Windows Management Instrumentation (WMI) Provider und ermöglicht Lese-/Schreibzugriff zu einer Configuration Manager Datenbank einer Site.
- Der SMS Provider bietet auch Zugriff über HTTPS: Administration Service
- Der Admininstration Service ist ein REST API Service. Dieser läuft unabhängig von anderen Web Komponenten im IIS auf deinem Configuration Manager Site Server und basiert auf dem Open Data (OData) v4 Protokoll.
Geschichtliches:
- Erstmalig vorgestellt als OData Connector in Config Mgar 1612 Technical Preview. CMRest Provider genannt. Ein OData RESTful Endpoint für Daten, welche bis anhin über Configuration Manager WMI Provider zugänglich waren
- Erstmalig aktiviert per default im 1810 Technical Preview, Ablösung der WMI Implementation geplant mit einem Connector Namens AdminService
Pre-Requisites:
- In Version 2006 und älter muss die Windows Server Rolle Web Server (IIS) aktiviert werden. Ab 2010 hinfällig.
- Ab Version 2107 wird der SMS Provider benötigt .NET 4.6.2 und Version 4.8 ist empfohlen. In Version 2103 und älter wird .NET 4.5 benötigt.
- Du musst möglicherweise HTTPS aktivieren mit einem trusted certificate. Mehr dazu findest du hier bei Microsoft selbst.
Zugriff:
- Für den Zugriff zum Administration Service benötigst du einen Benutzer mit Admin Rechten im Config Manager. Falls du via cloud management gateway auf den Admin Service zugreifst (Internet!), benötigst du einen Account im Azure Active Directory (Azure AD).
Technisches:
- Der Administration Service hat aktuell 2 Layers:
- Administration Service -> WMI -> SQL: https://<SMSProviderFQDN>/AdminService/wmi/<ClassName>*
Die WMI-Route unterstützt beide GET und POST Befehle zu über 700 Klassen.
- Administration Service -> OData/SQL: https://<SMSProviderFQDN>/AdminService/v1.0/<ClassName>*
Diese versionierte Route (v1.0) unterstützt neue Configuration Manager Funktionalität.
- Administration Service -> WMI -> SQL: https://<SMSProviderFQDN>/AdminService/wmi/<ClassName>*
*<ClassName> Wert ist ein gültiger Configuration Manager Klassename. Achtung: Case Sensitive!
- Installiert in: <InstallDir>\bin\X64\CMRestProvider
- Logs: <InstallDir>\CMProviderLog\AdminService.log –
- Logs execution of web service calls, oder wie definiert unter: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_REST_PROVIDER)
Links:
https://docs.microsoft.com/en-us/mem/configmgr/develop/adminservice/overview
https://www.asquaredozen.com/2019/02/12/the-system-center-configuration-manager-adminservice-guide/