適当おじさんの適当ブログ

技術のことやゲーム開発のことやゲームのことなど自由に雑多に書き連ねます

IntuneでWindows 10のスクリーンセーバーを設定する

スクリーンセーバーの設定をグループポリシーを使わず、Intuneだけで実現する方法を探した時のメモです。レジストリを書き換えるPowerShellスクリプトを作成し、そのスクリプトを Intune のデバイス構成プロファイルで流し込むことで実現しました。

実現したいスクリーンセーバーの設定

以下のようなスクリーンセーバーの設定を実現することを目指します。15分でスクリーンセーバーが発動し、再開時にログオン画面に戻るようにします。また、「15分」「再開時にログオン画面に戻る」の設定を変更不可にします。

f:id:subarunari:20200426003556p:plain

上記設定に対応するグループポリシーの項目と値は、以下のようになっています。

項目
スクリーンセーバーを有効にする オン
スクリーンセーバーをパスワードで保護する オン
スクリーンセーバーのタイムアウト 900(秒)

「GUIでの設定変更を不可能にする」という点は、Intuneの設定だけでは実現できませんでした。なので、スクリーンセーバーの設定を変更するPowerShellスクリプトを作成し、Intuneで流しこみます。

グループポリシーとレジストリキーの対応

グループポリシーの設定は、特定のレジストリに書き込まれるようになっています。スクリーンセーバーのグループポリシーが適用されると、以下のレジストリが変更されます。

項目 対応するレジストリキー
スクリーンセーバーを有効にする ScreenSaveActive
スクリーンセーバーをパスワードで保護する ScreenSaverIsSecure
スクリーンセーバーのタイムアウト ScreenSaveTimeout

レジストリキーはすべて HKCU:¥Software¥Policies¥Microsoft¥Windows¥Control Panel¥Desktop 以下に格納されています。

PowerShellでこれらのレジストリキーを設定することでグループポリシーと同じ状態を実現できます。 HKCU:¥Control Panel¥Desktop でも同様にスクリーンセーバーの設定ができます。ただし、こちらの場合は各種設定が適用されるものの「変更不可」の要件を満たすことができません。 GUIでの変更を禁止したい場合は、HKCU:¥Software¥Policies¥Microsoft¥Windows 以下に設定するようにしなければなりません。

レジストリキー設定スクリプトを作成する

パスの作成は New-Item、レジストリキーの設定は Set-ItemProperty で行います。

$controlPanelPolicyPath = "HKCU:¥Software¥Policies¥Microsoft¥Windows¥Control Panel"
if (-not (Test-Path $controlPanelPolicyPath) {
  New-Item -Path $controlPanelPolicyPath
}

$screensaverPolicyPath = "${controlPanelPolicyPath}¥Desktop"
if (-not (Test-Path $screensaverPolicyPath) {
  New-Item -Path $screensaverPolicyPath
}

Set-ItemProperty $screensaverPolicyPath -Name "ScreenSaveActive" -Value "1"
Set-ItemProperty $screensaverPolicyPath -Name "ScreenSaverIsSecure" -Value "1"
Set-ItemProperty $screensaverPolicyPath -Name "ScreenSaveTimeout" -Value "600"

デフォルトではパスが不足しているので、Set-Item でパスを作成していきます。そして、Set-ItemProperty で各種レジストリキーを設定していきます。レジストリを変更するためには管理者権限が必要です。ローカルで上記スクリプトをテスト実行する際は、PowerShellを管理者権限で起動するようにしてください。

Intuneにスクリプトをアップロードする

Microsoft Intune > デバイス構成 | スクリプト の「+追加」で作成したPowerShellスクリプトを追加します。あとはポリシーが適用されるのを待つだけです。

f:id:subarunari:20200426011238p:plain

さいごに

Intuneの設定可能項目は徐々に増えてきているようですが、すべてのグループポリシーに対応しているわけではありません。Intuneで設定不可能な項目については、今回のようにPowerShellスクリプトを作成して設定する必要がありそうです。 とはいえ、スクリプトを量産するとメンテナンスコストが膨らんでしまいます。Intuneが対応していない項目は諦める・運用を変更することも選択肢に入れる必要がありそうです。