Edited at

PowerShellでスクリーンセーバーが有効になってるか確認する

More than 3 years have passed since last update.

スクリーンセーバーの設定が有効になってるか、復帰時にパスワード入力が必須になってるかチェックする処理をPowerShellで書いたので貼っておきます。

スクリーンセーバーの設定はWMI経由で root/CIMV2Win32_Desktop から取得できます。

ポイントとしてデスクトップの設定はユーザごとにプロファイルが分かれてるので、現在ログイン中のユーザ設定を取得して絞込をします。

function SubCheck-ScreenSaver($sleepThresholdSec){

# スクリーンセーバーの設定はユーザプロファイル単位に存在するので、現在ログイン中のユーザの設定を取得する
$computername = $env:computername
$username = $env:username
$desktop = Get-WmiObject -Namespace "root/CIMV2" -Query "SELECT * FROM Win32_Desktop WHERE Name = ""$computername\\$username"""
# スクリーンセーバのプログラム
# (なし)=
# 3Dテキスト = C:\Windows\system32\ssText3d.scr
# バブル = C:\Windows\system32\Bubbles.scr
# ブランク = C:\Windows\system32\scrnsave.scr
# ラインアート = C:\Windows\system32\Mystify.scr
# リボン = C:\Windows\system32\Ribbons.scr
# 写真 = C:\Windows\system32\PhotoScreensaver.scr
$screenSaver = @{}
$screenSaver["ScreenSaverExecutable"] = $desktop.ScreenSaverExecutable
# 待ち時間(秒)
$screenSaver["ScreenSaverTimeout"] = $desktop.ScreenSaverTimeout
# 再開時にログオン画面に戻る(=復帰時のパスワード入力を必須にする)
$screenSaver["ScreenSaverSecure"] = $desktop.ScreenSaverSecure

# チェック判定
if (($screenSaver["ScreenSaverExecutable"] -ne $null) -and
($screenSaver["ScreenSaverTimeout"] -le $sleepThresholdSec) -and
($screenSaver["ScreenSaverSecure"] -eq $True)) {
$screenSaver["ScreenSaverCheckStatus"] = "OK"
} else {
$screenSaver["ScreenSaverCheckStatus"] = "NG"
}
return $screenSaver
}