screen saverと再開認証では、表示名ではなくcurrent user SIDと管理policyを最初の対象キーにします。変更や集計へ進む前にScreenSaveActive・TimeOut・Secure・SCRNSAVEを保存し、別対象を同じ結果へ混ぜないことが出発点です。
この手順の合格条件は「timeout後にscreen saverが動き再開時認証が必要な状態」です。Microsoft Learn:ControlPanelDisplay policyとSet-ItemPropertyで変更するHKCU値のscopeが定義するControlPanelDisplay policyとSet-ItemPropertyで変更するHKCU値のscopeを根拠にし、画面へ値が出たことだけを成功とは判定しません。
停止条件:GPO/MDMが同じuser settingを管理している。該当するときは操作を進めず、保存したHKCU値またはpolicyへ戻すを実行可能な形で確認してから再計画します。
screen saverと再開認証|成功を一つの状態で定義する:timeout後にscreen saverが動き再開時認証が必要な状態
スクリーンセーバー設定は読み取りで完結できます。Get-ItemPropertyの対象件数とGet-ItemPropertyの結果が一致し、エラーを除外していないことが合格条件です(スクリーンセーバー設定ではGet-ItemPropertyが同じ対象を返さない場合、変更前の値と適用元ポリシーを保存し、同じ設定画面またはGPOで元へ戻す)。
スクリーンセーバーと自動ロックは目的が異なる。セキュリティ要件は再開時認証と非アクティブ制限で確認する。 そのため、スクリーンセーバー設定の合格判定にはGet-ItemPropertyだけでなく、設定アプリの表示、ポリシー適用結果、サインアウト後の状態を照合する手順を組み合わせます。
| 判断要素 | スクリーンセーバー設定で記録する内容 |
| 対象の識別 | 現在ユーザー、設定画面、適用元ポリシー、現在の表示値 |
| 最初の確認 | Get-ItemProperty |
| 変更または操作 | 設定手順 |
| 再確認 | Get-ItemProperty |
| 中止条件 | 未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できない |
screen saverと再開認証|再取得できる初期値を控える:ScreenSaveActive・TimeOut・Secure・SCRNSAVE
スクリーンセーバー設定の読み取り例を示します。最初は通常権限で試し、アクセス拒否が出た箇所だけ必要権限を確認します。
$desktopPath = 'HKCU:\Control Panel\Desktop'
$policyPath = 'HKCU:\Software\Policies\Microsoft\Windows\Control Panel\Desktop'
$names = @('ScreenSaveActive','ScreenSaveTimeOut','ScreenSaverIsSecure','SCRNSAVE.EXE')
$backupPath = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-screensaver-before.json'
if (Test-Path $backupPath) { throw 'Screen-saver backup already exists' }
$managed = Get-ItemProperty -LiteralPath $policyPath -ErrorAction SilentlyContinue
if ($managed -and @($names | Where-Object { $null -ne $managed.PSObject.Properties[$_] }).Count -gt 0) { throw 'Screen saver is managed by policy; use the policy owner' }
$current = Get-ItemProperty -LiteralPath $desktopPath -ErrorAction Stop
$values = foreach ($name in $names) { [ordered]@{ Name=$name; Exists=($null -ne $current.PSObject.Properties[$name]); Value=if ($current.PSObject.Properties[$name]) { [string]$current.$name } else { $null } } }
[ordered]@{ Schema=1; Path=$desktopPath; Values=$values } | ConvertTo-Json -Depth 5 | Set-Content -LiteralPath $backupPath -Encoding utf8 -NoNewline -ErrorAction Stop
$values
「PowerShellを使ってシステムのスクリーンセーバー設定を変更する方法」でスクリーンセーバー設定を判断する場面では、Get-ItemPropertyの結果は設定アプリの表示、ポリシー適用結果、サインアウト後の状態を照合する順に読みます。件数、固有ID、状態、取得時刻を保存すると、後のGet-ItemPropertyと比較できます。
スクリーンセーバー設定は現在ユーザーのHKCU:\Control Panel\DesktopにあるSCRNSAVE.EXE、ScreenSaveActive、ScreenSaveTimeOut、ScreenSaverIsSecureを取得時刻付きで保存します。ポリシー配下の値が有効なら、その適用元も併記します。
「スクリーンセーバー設定とは」を検証する際は設定アプリの表示、ポリシー適用結果、サインアウト後の状態を照合する順序を崩しません。スクリーンセーバー設定の別スコープや別ユーザーの値を混ぜないことが重要です。
スクリーンセーバー設定の「基本的な設定方法」では、Get-ItemPropertyの取得時刻と対象件数を残します。後からGet-ItemPropertyを実行したとき、基本的な設定方法の差分理由を説明できる形にします。
スクリーンセーバーの種類を変更するの確認結果はスクリーンセーバー設定の変更可否に直結します。未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できないなら、スクリーンセーバーの種類を変更するの調査記録を残して実行を見送ります。
スクリーンセーバー表示と非アクティブ時の端末ロックは別の制御です。再開時認証やMachine inactivity limitを満たす必要がある端末では、見た目の設定だけでセキュリティ要件を満たしたと判断しません。
スクリーンセーバー設定で「1. スクリーンセーバーの待ち時間を設定する」を扱うときは、1. スクリーンセーバーの待ち時間を設定するの表示名だけでなく現在ユーザー、設定画面、適用元ポリシー、現在の表示値を記録します。Get-ItemPropertyでも同じ対象が返ることを確かめます。
Get-ItemPropertyの空結果は成功とは限りません。スクリーンセーバー設定では標準コマンドレット非提供、Edition差、GPO/MDMによる再適用を調べ、エラーを非表示にした場合も件数へ含めます。
スクリーンセーバーの変更はHKCUのexact valuesを対象にし、Settingsを開いたことだけでは完了にしません。GPO管理値がある場合はローカル変更を中止します。
screen saverと再開認証|操作対象の境界を引く:current user SIDと管理policy
スクリーンセーバー設定で使うPowerShellの版は $PSVersionTable で、コマンドの提供元は Get-Command Get-ItemProperty で確認します。現在のユーザー。組織ポリシーは管理者。対象候補が複数なら現在ユーザー、設定画面、適用元ポリシー、現在の表示値を使い、表示名の部分一致だけで選びません(スクリーンセーバー設定ではGet-ItemPropertyの対象件数とGet-ItemPropertyの再取得値を一致させます)。
- スクリーンセーバー設定: 実行端末と現在ユーザーを記録する
- Get-ItemProperty: Source、Version、利用可能なパラメーターを確認する
- 現在ユーザー、設定画面、適用元ポリシー、現在の表示値: 変更前の値を日時付きで保存する
- 変更前の画面値、適用元ポリシー、同期設定、ユーザースコープ: 復旧に使えることを読み取り確認する
- 未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できない: 該当すれば本番実行を見送る(スクリーンセーバー設定ではGet-ItemPropertyが同じ対象を返さない場合、変更前の値と適用元ポリシーを保存し、同じ設定画面またはGPOで元へ戻す)。
screen saverと再開認証|影響を一対象へ閉じ込める:current user SIDと管理policy
スクリーンセーバー設定の追加確認例です。システムを変更する命令ではなく、Get-ItemPropertyの結果を別の列や範囲で確かめる目的で使います(スクリーンセーバー設定ではGet-ItemPropertyの対象件数とGet-ItemPropertyの再取得値を一致させます)。
$backupPath = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-screensaver-before.json'
$backup = Get-Content -Raw $backupPath -ErrorAction Stop | ConvertFrom-Json
$desktopPath = [string]$backup.Path
$proposed = [ordered]@{ ScreenSaveActive='1'; ScreenSaveTimeOut='900'; ScreenSaverIsSecure='1'; 'SCRNSAVE.EXE'=(Join-Path $env:SystemRoot 'System32\scrnsave.scr') }
$proposed.GetEnumerator() | Select-Object Key, Value
if ((Read-Host 'Type APPLY-SCREENSAVER') -cne 'APPLY-SCREENSAVER') { throw 'Cancelled' }
foreach ($entry in $proposed.GetEnumerator()) { New-ItemProperty -LiteralPath $desktopPath -Name $entry.Key -PropertyType String -Value $entry.Value -Force -ErrorAction Stop | Out-Null }
$after = Get-ItemProperty -LiteralPath $desktopPath -ErrorAction Stop
foreach ($entry in $proposed.GetEnumerator()) { if ([string]$after.($entry.Key) -ne [string]$entry.Value) { throw "Readback failed: $($entry.Key)" } }
Write-Host 'Lock/sign out if needed, wait the full timeout, then run the standalone verification block.'
スクリーンセーバーと自動ロックは目的が異なる。セキュリティ要件は再開時認証と非アクティブ制限で確認する。 そのため、設定手順の結果が期待どおりでも環境固有の制約を再確認します。
screen saverと再開認証|復旧に必要な値を退避する:保存したHKCU値またはpolicyへ戻す
スクリーンセーバー設定は読み取り中心ですが、出力には端末名、SID、IP、メールアドレスなどが含まれる場合があります。保存先のACLと保管期限を決め、共有時は必要列だけに限定します。
screen saverと再開認証|件数と識別値で合否を決める:timeout後にscreen saverが動き再開時認証が必要な状態
「PowerShellを使ってシステムのスクリーンセーバー設定を変更する方法」の対象をスクリーンセーバー設定として検証するときは、Get-ItemPropertyでは、変更前に保存した現在ユーザー、設定画面、適用元ポリシー、現在の表示値と同じ対象を選びます。設定アプリの表示、ポリシー適用結果、サインアウト後の状態を照合することで、別スコープの値を成功結果として採用しません(スクリーンセーバー設定ではGet-ItemPropertyが同じ対象を返さない場合、変更前の値と適用元ポリシーを保存し、同じ設定画面またはGPOで元へ戻す)。
$backupPath = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-screensaver-before.json'
$mode = 'VERIFY_APPLIED' # ROLLBACK または VERIFY_ROLLBACK
$backup = Get-Content -Raw $backupPath -ErrorAction Stop | ConvertFrom-Json
$current = Get-ItemProperty -LiteralPath $backup.Path -ErrorAction Stop
if ($mode -eq 'VERIFY_APPLIED') {
if ($current.ScreenSaveActive -ne '1' -or $current.ScreenSaveTimeOut -ne '900' -or $current.ScreenSaverIsSecure -ne '1') { throw 'Applied screen-saver values mismatch' }
if ((Read-Host 'After timeout and resume authentication, type SCREENSAVER-TEST-PASSED') -cne 'SCREENSAVER-TEST-PASSED') { throw 'Behavior not verified' }
} elseif ($mode -eq 'ROLLBACK') {
if ((Read-Host 'Type ROLLBACK-SCREENSAVER') -cne 'ROLLBACK-SCREENSAVER') { throw 'Cancelled' }
foreach ($saved in @($backup.Values)) { if ([bool]$saved.Exists) { New-ItemProperty -LiteralPath $backup.Path -Name $saved.Name -PropertyType String -Value ([string]$saved.Value) -Force -ErrorAction Stop | Out-Null } else { Remove-ItemProperty -LiteralPath $backup.Path -Name $saved.Name -ErrorAction SilentlyContinue } }
} elseif ($mode -eq 'VERIFY_ROLLBACK') {
foreach ($saved in @($backup.Values)) { $exists = $null -ne $current.PSObject.Properties[$saved.Name]; if ($exists -ne [bool]$saved.Exists) { throw "Rollback presence mismatch: $($saved.Name)" }; if ($exists -and [string]$current.($saved.Name) -ne [string]$saved.Value) { throw "Rollback value mismatch: $($saved.Name)" } }
} else { throw 'Unsupported mode' }
- Get-ItemProperty: 同じ対象IDを再取得できた
- スクリーンセーバー設定: 意図した値または件数だけが変化した
- 設定アプリの表示、ポリシー適用結果、サインアウト後の状態を照合する: 関連機能も異常がない
- 標準コマンドレット非提供、Edition差、GPO/MDMによる再適用: 取得失敗をゼロ件として扱っていない(スクリーンセーバー設定ではGet-ItemPropertyの対象件数とGet-ItemPropertyの再取得値を一致させます)。
- スクリーンセーバーと自動ロックは目的が異なる。セキュリティ要件は再開時認証と非アクティブ制限で確認する。: 環境固有の制約に反していない
screen saverと再開認証|不明な状態を成功へ丸めない:GPO/MDMが同じuser settingを管理している
Get-ItemPropertyの結果が空なら、標準コマンドレット非提供、Edition差、GPO/MDMによる再適用を一つずつ確認します。ErrorActionで隠した例外をゼロ件として集計しません。
スクリーンセーバー設定が時間経過後に元へ戻る場合は、GPO/MDM、同期、サービス再起動、別スコープを調べます。繰り返し上書きして管理設定と競合させません。
未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できない状態はスクリーンセーバー設定の中止条件です。復旧に必要な人・経路・データが揃うまで、本番端末では設定手順を実行しません。
断定できません。スクリーンセーバー設定では標準コマンドレット非提供、Edition差、GPO/MDMによる再適用でも空になります。エラーを表示し、権限とスコープを確認してからGet-ItemPropertyまたは別の公式な取得方法で照合します(スクリーンセーバー設定ではGet-ItemPropertyが同じ対象を返さない場合、変更前の値と適用元ポリシーを保存し、同じ設定画面またはGPOで元へ戻す)。
screen saverと再開認証|復旧失敗時の停止点を置く:保存したHKCU値またはpolicyへ戻す
変更前の値と適用元ポリシーを保存し、同じ設定画面またはGPOで元へ戻す。未文書化のレジストリ一括配布はしない。
スクリーンセーバー設定を戻した後はGet-ItemPropertyとGet-ItemPropertyを再実行し、現在ユーザー、設定画面、適用元ポリシー、現在の表示値が変更前記録と一致することを確認します。復旧処理にも失敗したら連続操作を止め、保存した変更前の画面値、適用元ポリシー、同期設定、ユーザースコープとログを担当者へ渡します(スクリーンセーバー設定ではGet-ItemPropertyが同じ対象を返さない場合、変更前の値と適用元ポリシーを保存し、同じ設定画面またはGPOで元へ戻す)。
- Get-ItemPropertyの実行時刻、対象件数、エラー件数を残した
- 現在ユーザー、設定画面、適用元ポリシー、現在の表示値で対象を一意に特定した
- 変更前の画面値、適用元ポリシー、同期設定、ユーザースコープを変更前に保存して読めることを確認した(スクリーンセーバー設定ではGet-ItemPropertyの対象件数とGet-ItemPropertyの再取得値を一致させます)。
- 設定手順の対象を一端末・一ユーザー・一設定に限定した
- Get-ItemPropertyと実利用テストの両方を確認した
- 未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できない場合は実行を中止した
screen saverと再開認証|迷いやすい判断を先に解く:screen saverなしでもlockは可能か
権限だけが原因とは限りません。スクリーンセーバーと自動ロックは目的が異なる。セキュリティ要件は再開時認証と非アクティブ制限で確認する。 未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できないなら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(スクリーンセーバー設定ではGet-ItemPropertyの対象件数とGet-ItemPropertyの再取得値を一致させます)。

コメント