AvoidUsingWMICmdlet

重症度レベル:警告

デフォルト状態:常に有効

Description

このルールはWindows管理インストゥルメンテーション(WMI)コマンドレットの使用を検出します。 PowerShell 3.0以降は、WMI cmdletの代わりにCommon Information Model(CIM)コマンドレットを使うべきです。 CIMコマンドレットは WS-Management(WSMan)標準およびCIM標準に準拠しており、Windowsおよび非Windowsオペレーティングシステムの管理を可能にします。

これらのWMIコマンドレットは使わないでください:

  • Get-WmiObject
  • Remove-WmiObject
  • Invoke-WmiMethod
  • Register-WmiEvent
  • Set-WmiInstance

代わりに以下のCIMコマンドレットを使用してください:

  • Get-CimInstance
  • Remove-CimInstance
  • Invoke-CimMethod
  • Register-CimIndicationEvent
  • Set-CimInstance

例

非準拠

Get-WmiObject -Query 'Select * from Win32_Process where name LIKE "myprocess%"' | Remove-WmiObject
Invoke-WmiMethod -Class Win32_Process -Name 'Create' -ArgumentList @{ CommandLine = 'notepad.exe' }

対応

Get-CimInstance -Query 'Select * from Win32_Process where name LIKE "myprocess%"' | Remove-CimInstance
Invoke-CimMethod -ClassName Win32_Process -MethodName 'Create' -Arguments @{ CommandLine = 'notepad.exe' }

ルールの設定

このルールは常に有効で、設定はできません。 このルールを避けるために、以下のいずれかの方法を用いてください。

  • 欲しいルールだけを含めるか、不要なルールを除外するカスタムルール設定ファイルを作成しましょう。
  • 特定のコードブロックに対してルール抑制を抑制するために、適切なルール抑制属性をコードに追加してください。 詳細については、PSScriptAnalyzerの使用に関する「抑制ルール」セクションをご覧ください。