WMI ブリッジ プロバイダーでの PowerShell スクリプトの使用

この記事では、PowerShell コマンドレット スクリプトを使用してユーザーごととデバイスごとのポリシー設定を構成する方法と、 WMI ブリッジ プロバイダーを使用してメソッドを呼び出す方法について説明します。

デバイスごとのポリシー設定の構成

このセクションでは、 WMI ブリッジ プロバイダーを使用してデバイスごとの設定を構成するための PowerShell コマンドレットサンプル スクリプトを提供します。 クラスがデバイス設定をサポートしている場合は、InPartition("local-system") に対してクラス レベルの修飾子が定義されている必要があります。

すべてのデバイス設定では、WMI Bridge クライアントをローカル システム ユーザーで実行する必要があります。 これを行うには、 から psexec ツール https://technet.microsoft.com/sysinternals/bb897553.aspx をダウンロードし、管理者特権の管理者コマンド プロンプトからを実行 psexec.exe -i -s cmd.exe します。

このセクションのスクリプト例では、クラス 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;
};

次のスクリプトでは、インスタンスの作成、列挙、クエリ、変更、削除の方法について説明します。

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

ユーザーごとの設定の構成

このセクションでは、WMI Bridge を使用してユーザーごとの設定を構成するための PowerShell コマンドレットサンプル スクリプトを提供します。 クラスがユーザー設定をサポートしている場合は、InPartition("local-user") に対してクラス レベル修飾子が定義されている必要があります。

このセクションのスクリプト例では、クラス MDM_Policy_User_Config01_Authentication02を使用します。

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

現在ログオンしているユーザーが自分でユーザー設定にアクセスまたは変更しようとしている場合は、前のセクションのデバイスごとの設定スクリプトを使用する方がはるかに簡単です。 すべての PowerShell コマンドレットは、管理者特権の管理者コマンド プロンプトで実行する必要があります。

別のユーザーの設定にアクセスまたは変更する場合、WMI Bridge では、ネイティブの PowerShell コマンドレットではサポートされていない MI カスタム コンテキストでユーザー SID を設定することが想定されているため、PowerShell スクリプトの方が複雑になります。

すべてのコマンドは、ローカル システムで実行する必要があります。

Windows コマンド wmic useraccount get name, sid を使用して、ユーザー SID を取得できます。 次のスクリプト例では、ユーザー SID が 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
}

メソッドの呼び出し

このセクションでは、WMI Bridge オブジェクト メソッドを呼び出す PowerShell コマンドレットサンプル スクリプトを提供します。 次のスクリプトは、ローカル システム ユーザーの下で実行する必要があります。 これを行うには、 から psexec ツール https://technet.microsoft.com/sysinternals/bb897553.aspx をダウンロードし、管理者特権の管理者コマンド プロンプトからを実行 psexec.exe -i -s cmd.exe します。

このセクションのスクリプト例では、MDM_WindowsLicensing クラスの UpgradeEditionWithProductKeyMethod メソッドを使用します。

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

WMI Bridge プロバイダー