Uso del scripting de PowerShell con el proveedor de puentes de WMIUsing PowerShell scripting with the WMI Bridge Provider

En este tema se describen los scripts de cmdlet de PowerShell para configurar las opciones de Directiva por usuario y por dispositivo, así como la forma de invocar métodos a través del proveedor de puente WMI.This topic covers using PowerShell Cmdlet scripts to configure per-user and per-device policy settings, as well as how to invoke methods through the WMI Bridge Provider.

Configurar las opciones de Directiva por dispositivoConfiguring per-device policy settings

Esta sección proporciona un script de ejemplo de cmdlet de PowerShell para configurar las opciones por dispositivo a través del proveedor de puente WMI.This section provides a PowerShell Cmdlet sample script to configure per-device settings through the WMI Bridge Provider. Si una clase admite la configuración de un dispositivo, debe haber un calificador de nivel de clase definido para inpartition ("local-System").If a class supports device settings, there must be a class level qualifier defined for InPartition("local-system").

Para la configuración de todos los dispositivos, el cliente de puente WMI debe ejecutarse bajo el usuario del sistema local.For all device settings, the WMI Bridge client must be executed under local system user. Para ello, descargue la herramienta PsExec de https://technet.microsoft.com/sysinternals/bb897553.aspx y ejecute psexec.exe -i -s cmd.exe desde un símbolo del sistema con privilegios elevados de administrador.To do that, download the psexec tool from https://technet.microsoft.com/sysinternals/bb897553.aspx and run psexec.exe -i -s cmd.exe from an elevated admin command prompt.

En el ejemplo de script de esta sección se usa la clase MDM_Policy_Config01_WiFi02:The script example in this section uses the class 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;
};

La siguiente secuencia de comandos describe cómo crear, enumerar, consultar, modificar y eliminar instancias.The following script describes how to create, enumerate, query, modify, and delete instances.

$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
}

Configurar opciones por usuarioConfiguring per-user settings

Esta sección proporciona un script de ejemplo de cmdlet de PowerShell para establecer la configuración por usuario a través del puente WMI.This section provides a PowerShell Cmdlet sample script to configure per-user settings through the WMI Bridge. Si una clase admite la configuración de usuario, debe haber un calificador de nivel de clase definido para inpartition ("local-user").If a class supports user settings, there must be a class level qualifier defined for InPartition("local-user").

En el ejemplo de script de esta sección se usa la clase MDM_Policy_User_Config01_Authentication02:The script example in this section uses the class MDM_Policy_User_Config01_Authentication02:

[dynamic, provider("DMWmiBridgeProv"), InPartition("local-user")]
class MDM_Policy_User_Config01_Authentication02
{
  string InstanceID;
  string ParentID;
  sint32 AllowEAPCertSSO;
};

Notasi el usuario que ha iniciado sesión está intentando acceder o modificar la configuración de usuario por sí mismo, es mucho más fácil usar la secuencia de comandos de configuración por dispositivo de la sección anterior.NoteIf the currently logged on user is trying to access or modify user settings for themselves, it is much easier to use the per-device settings script from the previous section. Todos los cmdlets de PowerShell deben ejecutarse en un símbolo del sistema con privilegios elevados de administrador.All PowerShell cmdlets must be executed under an elevated admin command prompt.

 

Si se tiene acceso o se modifica la configuración de un usuario diferente, el script de PowerShell es más complicado porque el puente WMI espera que el SID del usuario se establezca en el contexto personalizado de MI, lo cual no es compatible con los cmdlets de PowerShell nativos.If accessing or modifying settings for a different user, then the PowerShell script is more complicated because the WMI Bridge expects the user SID to be set in MI Custom Context, which is not supported in native PowerShell cmdlets.

Nota todos los comandos deben ejecutarse en sistema local.Note All commands must executed under local system.

 

Puede obtener un SID de usuario mediante el comando wmic useraccount get name, sidde Windows.A user SID can be obtained by Windows command wmic useraccount get name, sid. En el siguiente ejemplo de script se supone que el SID de usuario es S-1-5-21-4017247134-4237859428-3008104844-1001.The following script example assumes the user SID is 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
}

Invocar métodosInvoking methods

Esta sección proporciona un script de ejemplo de cmdlet de PowerShell para invocar un método de objeto de puente WMI.This section provides a PowerShell Cmdlet sample script to invoke a WMI Bridge object method. El siguiente script debe ejecutarse bajo el usuario del sistema local.The following script must be executed under local system user. Para ello, descargue la herramienta PsExec de https://technet.microsoft.com/sysinternals/bb897553.aspx y ejecute psexec.exe -i -s cmd.exe desde un símbolo del sistema con privilegios elevados de administrador.To do that, download the psexec tool from https://technet.microsoft.com/sysinternals/bb897553.aspx and run psexec.exe -i -s cmd.exe from an elevated admin command prompt.

En el ejemplo de script de esta sección se usa el método UpgradeEditionWithProductKeyMethod de la clase MDM_WindowsLicensing .The script example in this section uses the UpgradeEditionWithProductKeyMethod method of the MDM_WindowsLicensing class.

$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
}

Temas relacionadosRelated topics

Proveedor de puente WMIWMI Bridge Provider