PowerShellでディスプレイの明るさを変えてみましょう。
なんの意味があるかって?特に意味はありませんが、何かの役に立つかも知れません。
使うのは、Get-CimInstanceコマンドレットとInvoke-CimMethodsコマンドレットです。
CIMについてはこちら→Common Information Model - Win32 apps | Microsoft Docs
ディスプレイの現在の輝度を確認する
まずは、ディスプレイの現在の明るさ(輝度)を確認してみます。
ディスプレイの輝度についての情報を持っているクラスは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