Verwenden der PowerShell-Skripterstellung mit dem WMI-Bridge-Anbieter
In diesem Artikel wird die Verwendung von PowerShell-Cmdlet-Skripts zum Konfigurieren von Richtlinieneinstellungen pro Benutzer und pro Gerät sowie das Aufrufen von Methoden über den WMI-Bridge-Anbieter behandelt.
Konfigurieren von Gerätespezifischen Richtlinieneinstellungen
Dieser Abschnitt enthält ein PowerShell-Cmdlet-Beispielskript zum Konfigurieren gerätespezifischer Einstellungen über den WMI-Bridge-Anbieter. Wenn eine Klasse Geräteeinstellungen unterstützt, muss für InPartition ("local-system") ein Qualifizierer auf Klassenebene definiert sein.
Für alle Geräteeinstellungen muss der WMI-Bridge-Client unter dem lokalen Systembenutzer ausgeführt werden. Laden Sie dazu das Psexec-Tool von https://technet.microsoft.com/sysinternals/bb897553.aspx herunter, und führen Sie psexec.exe -i -s cmd.exe
es über eine Administratoreingabeaufforderung mit erhöhten Rechten aus.
Das Skriptbeispiel in diesem Abschnitt verwendet die -Klasse MDM_Policy_Config01_WiFi02:
[dynamic, provider("DMWmiBridgeProv"), InPartition("local-system")]
class MDM_Policy_Config01_WiFi02
{
string InstanceID;
string ParentID;
sint32 AllowInternetSharing;
sint32 AllowAutoConnectToWiFiSenseHotspots;
sint32 WLANScanMode;
};
Das folgende Skript beschreibt, wie Instanzen erstellt, aufgezählt, abfrage, geändert und gelöscht werden.
$namespaceName = "root\cimv2\mdm\dmmap"
$className = "MDM_Policy_Config01_WiFi02"
# Create a new instance for MDM_Policy_Config01_WiFi02
New-CimInstance -Namespace $namespaceName -ClassName $className -Property @{ParentID="./Vendor/MSFT/Policy/Config";InstanceID="WiFi";AllowInternetSharing=1;AllowAutoConnectToWiFiSenseHotspots=0;WLANScanMode=100}
# Enumerate all instances available for MDM_Policy_Config01_WiFi02
Get-CimInstance -Namespace $namespaceName -ClassName $className
# Query instances with matching properties
Get-CimInstance -Namespace $namespaceName -ClassName $className -Filter "ParentID='./Vendor/MSFT/Policy/Config' and InstanceID='WiFi'"
# Modify existing instance
$obj = Get-CimInstance -Namespace $namespaceName -ClassName $className -Filter "ParentID='./Vendor/MSFT/Policy/Config' and InstanceID='WiFi'"
$obj.WLANScanMode=500
Set-CimInstance -CimInstance $obj
# Delete existing instance
try
{
$obj = Get-CimInstance -Namespace $namespaceName -ClassName $className -Filter "ParentID='./Vendor/MSFT/Policy/Config' and InstanceID='WiFi'"
Remove-CimInstance -CimInstance $obj
}
catch [Exception]
{
write-host $_ | out-string
}
Konfigurieren von Benutzereinstellungen
Dieser Abschnitt enthält ein PowerShell-Cmdlet-Beispielskript zum Konfigurieren von Benutzereinstellungen über die WMI-Brücke. Wenn eine Klasse Benutzereinstellungen unterstützt, muss ein Qualifizierer auf Klassenebene für InPartition ("local-user") definiert sein.
Das Skriptbeispiel in diesem Abschnitt verwendet die -Klasse MDM_Policy_User_Config01_Authentication02:
[dynamic, provider("DMWmiBridgeProv"), InPartition("local-user")]
class MDM_Policy_User_Config01_Authentication02
{
string InstanceID;
string ParentID;
sint32 AllowEAPCertSSO;
};
Hinweis
Wenn der aktuell angemeldete Benutzer versucht, auf die Benutzereinstellungen zuzugreifen oder diese zu ändern, ist es viel einfacher, das Pro-Gerät-Einstellungsskript aus dem vorherigen Abschnitt zu verwenden. Alle PowerShell-Cmdlets müssen über eine Administratoreingabeaufforderung mit erhöhten Rechten ausgeführt werden.
Beim Zugriff auf oder Ändern von Einstellungen für einen anderen Benutzer ist das PowerShell-Skript komplizierter, da die WMI-Brücke erwartet, dass die Benutzer-SID im benutzerdefinierten MI-Kontext festgelegt wird, was in nativen PowerShell-Cmdlets nicht unterstützt wird.
Hinweis
Alle Befehle müssen unter dem lokalen System ausgeführt werden.
Der Windows-Befehl wmic useraccount get name, sid
kann verwendet werden, um die Benutzer-SID abzurufen. Im folgenden Skriptbeispiel wird davon ausgegangen, dass die Benutzer-SID lautet S-1-5-21-4017247134-4237859428-3008104844-1001
.
$namespaceName = "root\cimv2\mdm\dmmap"
$className = "MDM_Policy_User_Config01_Authentication02"
# Configure CIM operation options with target user info
$options = New-Object Microsoft.Management.Infrastructure.Options.CimOperationOptions
$options.SetCustomOption("PolicyPlatformContext_PrincipalContext_Type", "PolicyPlatform_UserContext", $false)
$options.SetCustomOption("PolicyPlatformContext_PrincipalContext_Id", "S-1-5-21-4017247134-4237859428-3008104844-1001", $false)
# Construct session used for all operations
$session = New-CimSession
##########################################################################
# Create a new instance for MDM_Policy_User_Config01_Authentication02
##########################################################################
$newInstance = New-Object Microsoft.Management.Infrastructure.CimInstance $className, $namespaceName
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ParentID", './Vendor/MSFT/Policy/Config', "string", "Key")
$newInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("InstanceID", 'Authentication', "String", "Key")
$newInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("AllowEAPCertSSO", 1, "Sint32", "Property")
$newInstance.CimInstanceProperties.Add($property)
try
{
$session.CreateInstance($namespaceName, $newInstance, $options)
}
catch [Exception]
{
write-host $_ | out-string
}
##########################################################################
# Enumerate all instances for MDM_Policy_User_Config01_Authentication02
##########################################################################
$session.EnumerateInstances($namespaceName, $className, $options)
##########################################################################
# Query instance for MDM_Policy_User_Config01_Authentication02
# with matching properties
##########################################################################
$getInstance = New-Object Microsoft.Management.Infrastructure.CimInstance $className, $namespaceName
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ParentID", './Vendor/MSFT/Policy/Config', "string", "Key")
$getInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("InstanceID", 'Authentication', "String", "Key")
$getInstance.CimInstanceProperties.Add($property)
try
{
$session.GetInstance($namespaceName, $getInstance, $options)
}
catch [Exception]
{
write-host $_ | out-string
}
##########################################################################
# Modify existing instance for MDM_Policy_User_Config01_Authentication02
##########################################################################
$getInstance = New-Object Microsoft.Management.Infrastructure.CimInstance $className, $namespaceName
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ParentID", './Vendor/MSFT/Policy/Config', "string", "Key")
$getInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("InstanceID", 'Authentication', "String", "Key")
$getInstance.CimInstanceProperties.Add($property)
try
{
$updateInstance = $session.GetInstance($namespaceName, $getInstance, $options)[0]
$updateInstance.AllowEAPCertSSO = 0
$session.ModifyInstance($namespaceName, $updateInstance, $options)
}
catch [Exception]
{
write-host $_ | out-string
}
##########################################################################
# Delete existing instance for MDM_Policy_User_Config01_Authentication02
##########################################################################
$getInstance = New-Object Microsoft.Management.Infrastructure.CimInstance $className, $namespaceName
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ParentID", './Vendor/MSFT/Policy/Config', "string", "Key")
$getInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("InstanceID", 'Authentication', "String", "Key")
$getInstance.CimInstanceProperties.Add($property)
try
{
$deleteInstance = $session.GetInstance($namespaceName, $getInstance, $options)[0]
$session.DeleteInstance($namespaceName, $deleteInstance, $options)
}
catch [Exception]
{
write-host $_ | out-string
}
Aufrufen von Methoden
Dieser Abschnitt enthält ein PowerShell-Cmdlet-Beispielskript zum Aufrufen einer WMI-Bridge-Objektmethode. Das folgende Skript muss unter dem lokalen Systembenutzer ausgeführt werden. Laden Sie dazu das Psexec-Tool von https://technet.microsoft.com/sysinternals/bb897553.aspx herunter, und führen Sie psexec.exe -i -s cmd.exe
es über eine Administratoreingabeaufforderung mit erhöhten Rechten aus.
Im Skriptbeispiel in diesem Abschnitt wird die UpgradeEditionWithProductKeyMethod-Methode der MDM_WindowsLicensing-Klasse verwendet.
$namespaceName = "root\cimv2\mdm\dmmap"
$className = "MDM_WindowsLicensing"
$methodName = "UpgradeEditionWithProductKeyMethod"
$fakeProductKey = "7f1a3659-3fa7-4c70-93ce-0d354e8e158e"
$session = New-CimSession
$params = New-Object Microsoft.Management.Infrastructure.CimMethodParametersCollection
$param = [Microsoft.Management.Infrastructure.CimMethodParameter]::Create("param", $fakeProductKey, "String", "In")
$params.Add($param)
try
{
$instance = Get-CimInstance -Namespace $namespaceName -ClassName $className -Filter "ParentID='./Vendor/MSFT' and InstanceID='WindowsLicensing'"
$session.InvokeMethod($namespaceName, $instance, $methodName, $params)
}
catch [Exception]
{
write-host $_ | out-string
}