WMI 브리지 공급자를 통해 PowerShell 스크립팅 사용

이 문서에서는 PowerShell Cmdlet 스크립트를 사용하여 사용자별 및 디바이스별 정책 설정을 구성하고 WMI 브리지 공급자를 통해 메서드를 호출하는 방법을 설명합니다.

디바이스별 정책 설정 구성

이 섹션에서는 WMI 브리지 공급자를 통해 디바이스별 설정을 구성하는 PowerShell Cmdlet 샘플 스크립트를 제공합니다. 클래스가 디바이스 설정을 지원하는 경우 InPartition("local-system")에 대해 정의된 클래스 수준 한정자여야 합니다.

모든 디바이스 설정의 경우 WMI 브리지 클라이언트는 로컬 시스템 사용자에 따라 실행되어야 합니다. 이렇게 하려면 에서 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 브리지를 통해 사용자별 설정을 구성하는 PowerShell Cmdlet 샘플 스크립트를 제공합니다. 클래스가 사용자 설정을 지원하는 경우 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 cmdlet은 관리자 권한 관리자 명령 프롬프트에서 실행되어야 합니다.

다른 사용자에 대한 설정에 액세스하거나 수정하는 경우 WMI 브리지는 네이티브 PowerShell cmdlet에서 지원되지 않는 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 Cmdlet 샘플 스크립트를 제공합니다. 다음 스크립트는 로컬 시스템 사용자에 따라 실행되어야 합니다. 이렇게 하려면 에서 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 브리지 공급자