Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
}