Windows notification設定では、表示名ではなく現在ユーザー・app identity・policy sourceを最初の対象キーにします。変更や集計へ進む前に通知SettingsとNotifications CSPの適用状態を保存し、別対象を同じ結果へ混ぜないことが出発点です。
この手順の合格条件は「対象appまたはpolicyだけが意図した通知状態になること」です。Microsoft Learn:Settings URIは画面起動だけを行いNotifications CSPが管理可能policyを定義するが定義するSettings URIは画面起動だけを行いNotifications CSPが管理可能policyを定義するを根拠にし、画面へ値が出たことだけを成功とは判定しません。
停止条件:MDM/GPOが同じ通知項目を管理している。該当するときは操作を進めず、設定画面または管理profileの保存値へ戻すを実行可能な形で確認してから再計画します。
Windows notification設定|成功を一つの状態で定義する:対象appまたはpolicyだけが意図した通知状態になること
Windowsにはアプリ別通知を直接変更・読取する一般向けPowerShell cmdletはありません。ms-settings URIは画面を開くだけで、変更成功の証拠にはしません。
個人端末は対象アプリ一件をSettingsで手動変更し、before/after、ユーザー、時刻、実通知テストを記録します。未文書化registry値は使用しません。
| 判断要素 | Windows通知設定で記録する内容 |
| 対象の識別 | 現在ユーザー、設定画面、適用元ポリシー、現在の表示値 |
| 最初の確認 | Start-Process |
| 変更または操作 | 設定手順 |
| 再確認 | Start-Process |
| 中止条件 | 未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できない |
managed deviceはNotifications CSPをMDMの検証グループ一件へ割り当て、MDM側のassignment/status/exportを証跡にします。ローカルPowerShellでCSPを偽装しません。
$recordPath = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-notification-manual-record.json'
if (Test-Path -LiteralPath $recordPath) { throw "Record already exists: $recordPath" }
$targetApp = Read-Host 'Enter the exact app name shown under Notifications from apps and other senders'
$beforeState = Read-Host 'Enter the observed before state exactly: On or Off'
if (-not $targetApp -or $beforeState -notin @('On','Off')) { throw 'Exact app and before state are required' }
[ordered]@{ Schema=1; User=$env:USERNAME; TargetApp=$targetApp; Before=$beforeState; After=$null; ChangedUtc=$null; Method='Manual Settings; ms-settings URI is navigation only' } |
ConvertTo-Json | Set-Content -LiteralPath $recordPath -Encoding utf8 -NoNewline -ErrorAction Stop
Start-Process 'ms-settings:notifications' -ErrorAction Stop
Write-Host 'Do not continue until the exact app row and before toggle match the record.'
rollbackは同じ対象アプリの元トグルへ戻すか、MDM assignmentを削除してsync後に状態と実通知を再確認します。
Windows notification設定|接続先とscopeを確定する:現在ユーザー・app identity・policy source
- Windows通知設定: 実行端末と現在ユーザーを記録する
- Start-Process: Source、Version、利用可能なパラメーターを確認する
- 現在ユーザー、設定画面、適用元ポリシー、現在の表示値: 変更前の値を日時付きで保存する
- 変更前の画面値、適用元ポリシー、同期設定、ユーザースコープ: 復旧に使えることを読み取り確認する
- 未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できない: 該当すれば本番実行を見送る(Windows通知設定ではStart-Processが同じ対象を返さない場合、変更前の全体通知、アプリ別通知、通知の優先度、応答不可モードを記録し、同じ画面で戻す)。
PowerShellを使う利点は通知設定画面、ユーザー単位の値、組織ポリシーの適用元を同じ作業記録へ結び付けられる点です。現在ユーザーのSIDとPolicy sourceを控え、管理対象端末でローカル値がポリシーに上書きされる場合は変更を止めます。
Windows通知には全設定を直接変更する共通PowerShellコマンドレットがありません。設定URIを開く操作と、現在ユーザーの通知状態、アプリ単位の許可、GPOまたはMDMの適用元を別欄で確認し、画面が開いたことを変更成功にしません。
Windows通知全体の切替は現在ユーザーへ影響するため、変更後に設定画面を開き直し、テスト通知が期待どおり表示または抑止されるか確認します。集中モードや管理ポリシーによる抑止は別条件として切り分けます。
通知の確認記録には現在ユーザー、対象アプリ、全体通知、集中モード、管理ポリシーの有無を分けて残します。セキュリティ警告まで一括で無効化せず、変更対象のアプリだけを設定画面で承認します。
アプリ単位では表示名ではなくパッケージまたはアプリIDを特定し、その一件のトグルだけを変更します。対象アプリからテスト通知を発生させ、全体トグルと他アプリの状態が保持されたことを確認してから完了にします。
Get-Processの空結果は成功とは限りません。Windows通知設定では標準コマンドレット非提供、Edition差、GPO/MDMによる再適用を調べ、エラーを非表示にした場合も件数へ含めます。
Windows notification設定|失敗後に使う証拠を確保する:設定画面または管理profileの保存値へ戻す
Windows通知設定は読み取り中心ですが、出力には端末名、SID、IP、メールアドレスなどが含まれる場合があります。保存先のACLと保管期限を決め、共有時は必要列だけに限定します。
$recordPath = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-notification-manual-record.json'
$record = Get-Content -Raw -LiteralPath $recordPath -ErrorAction Stop | ConvertFrom-Json
if ((Read-Host "Type CHANGE-$($record.TargetApp) after selecting that exact app row") -cne "CHANGE-$($record.TargetApp)") { throw 'Cancelled' }
Start-Process 'ms-settings:notifications' -ErrorAction Stop
$afterState = Read-Host "After changing only $($record.TargetApp), enter the observed state: On or Off"
if ($afterState -notin @('On','Off') -or $afterState -eq $record.Before) { throw 'No exact state transition recorded' }
$record.After = $afterState; $record.ChangedUtc = [DateTime]::UtcNow.ToString('o')
$record | ConvertTo-Json | Set-Content -LiteralPath $recordPath -Encoding utf8 -NoNewline -ErrorAction Stop
Write-Host 'Generate one real notification from the target app before declaring completion.'
Windows notification設定|別の読取経路で照合する:対象appまたはpolicyだけが意図した通知状態になること
$recordPath = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-notification-manual-record.json'
$mode = 'VERIFY_APPLIED' # ROLLBACK または VERIFY_ROLLBACK
$record = Get-Content -Raw -LiteralPath $recordPath -ErrorAction Stop | ConvertFrom-Json
Start-Process 'ms-settings:notifications' -ErrorAction Stop
$observed = Read-Host "Enter current state for exact app $($record.TargetApp): On or Off"
if ($mode -eq 'VERIFY_APPLIED') {
if ($observed -ne $record.After) { throw 'Manual after-state mismatch' }
if ((Read-Host 'After a real app notification test, type NOTIFICATION-TEST-PASSED') -cne 'NOTIFICATION-TEST-PASSED') { throw 'Behavior not verified' }
} elseif ($mode -eq 'ROLLBACK') {
if ((Read-Host "Restore $($record.TargetApp) to $($record.Before), then type ROLLBACK-NOTIFICATION") -cne 'ROLLBACK-NOTIFICATION') { throw 'Cancelled' }
} elseif ($mode -eq 'VERIFY_ROLLBACK') { if ($observed -ne $record.Before) { throw 'Rollback state mismatch' }
} else { throw 'Unsupported mode' }
# Managed devices: deploy/remove only the documented Notifications CSP in MDM; save assignment, sync, status, and rollback evidence there.
- Start-Process: 同じ対象IDを再取得できた
- Windows通知設定: 意図した値または件数だけが変化した
- 設定アプリの表示、ポリシー適用結果、サインアウト後の状態を照合する: 関連機能も異常がない
- 標準コマンドレット非提供、Edition差、GPO/MDMによる再適用: 取得失敗をゼロ件として扱っていない(Windows通知設定ではStart-Processが同じ対象を返さない場合、変更前の全体通知、アプリ別通知、通知の優先度、応答不可モードを記録し、同じ画面で戻す)。
- 通知無効化はセキュリティ警告や会議通知を見落とす可能性がある。全体オフではなく対象アプリを絞る。: 環境固有の制約に反していない
Windows notification設定|追加操作を止める兆候を読む:MDM/GPOが同じ通知項目を管理している
未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できない状態はWindows通知設定の中止条件です。復旧に必要な人・経路・データが揃うまで、本番端末では設定手順を実行しません。
Windows notification設定|作成物だけを切り離して戻す:設定画面または管理profileの保存値へ戻す
変更前の全体通知、アプリ別通知、通知の優先度、応答不可モードを記録し、同じ画面で戻す。
Windows notification設定|次回比較に使う値を固定する:通知SettingsとNotifications CSPの適用状態
- Start-Processの実行時刻、対象件数、エラー件数を残した
- 現在ユーザー、設定画面、適用元ポリシー、現在の表示値で対象を一意に特定した
- 変更前の画面値、適用元ポリシー、同期設定、ユーザースコープを変更前に保存して読めることを確認した(Windows通知設定ではStart-Processが同じ対象を返さない場合、変更前の全体通知、アプリ別通知、通知の優先度、応答不可モードを記録し、同じ画面で戻す)。
- 設定手順の対象を一端末・一ユーザー・一設定に限定した
- Start-Processと実利用テストの両方を確認した
- 未文書化レジストリしか根拠がなく、組織ポリシーとの競合を判定できない場合は実行を中止した

コメント