適材適所

PowerShellやVBAなどプログラミング系の話多めで

【PowerShell】ディスプレイの明るさ(輝度)を変更する【Invoke-CimMethods】

PowerShellでディスプレイの明るさを変えてみましょう。

なんの意味があるかって?特に意味はありませんが、何かの役に立つかも知れません。

使うのは、Get-CimInstanceコマンドレットとInvoke-CimMethodsコマンドレットです。

CIMについてはこちら→Common Information Model - Win32 apps | Microsoft Docs

CIMを使えばWindowsの自動化がさらに捗りますよ~。

ディスプレイの現在の輝度を確認する

まずは、ディスプレイの現在の明るさ(輝度)を確認してみます。

ディスプレイの輝度についての情報を持っているクラスはWmiMonitorBrightnessクラスになります。

 
Get-Ciminstance -Namespace root/WMI -ClassName WmiMonitorBrightness

結果

Active            : True
CurrentBrightness : 30
InstanceName      : DISPLAY\MS_9003\4&1df39509&0&UID265988_0
Level             : {0, 1, 2, 3...}
Levels            : 101
PSComputerName    :

この中のCurrentBrightnessが現在の明るさになります。

ちなみにCurrentBrightnessだけを確認したいときは次のようにします。

 
(Get-Ciminstance -Namespace root/WMI -ClassName WmiMonitorBrightness).CurrentBrightness

ディスプレイの輝度を変更する

輝度を変更するときは、wmiMonitorBrightNessMethodsクラスのWmiSetBrightnessメソッドを使います。

構文は次の通り。

uint32 WmiSetBrightness(
   uint32 Timeout,
   uint8  Brightness
);

そして、このメソッドを実行するためにはInvoke-CimMethodコマンドレットを使って呼び出してあげる必要があります。

Get-CimInstanceで作成されたオブジェクトでは固有のメソッドを実行できない仕様になっているようです。

Get-CimInstanceコマンドレットと組み合わせて次のように呼び出します。

 
$method=Get-CimInstance -ClassName wmiMonitorBrightNessMethods -Namespace root/wmi
Invoke-CimMethod -MethodName WmiSetBrightness -Arguments @{brightness=40;timeout=10} -InputObject $method

-Arguments @{brightness=40;timeout=10}の部分が輝度を指定しているところになります。

この例ではbrightness=40で輝度を40に設定しています。

ちなみにtimeoutの値はあまり意味がなさそうです。

変数を経由せず、パイプを使ってワンライナーで書くこともできます。

 
Get-CimInstance -ClassName wmiMonitorBrightNessMethods -Namespace root/wmi|Invoke-CimMethod -MethodName WmiSetBrightness -Arguments @{brightness=30;timeout=10}|out-null

終わりに

PowerShellを使ってディスプレイの輝度を変更する方法について紹介しました。

何かの役に立ちますかね?

何かの役に立ったら、コメントやTwitterで教えてくれるとありがたいです。

というわけで、ここまでお読みいただき、ありがとうございました。

参考

WmiMonitorBrightnessMethods クラスの [Wmi Set輝度メソッドです。 - Win32 apps | Microsoft Docs

Use PowerShell to Report and Set Monitor Brightness | Scripting Blog

WMI -> CIM への書き換え例 - Qiita