Amazonで商品を見るセール会場へ

Windows|サインイン時・終了前にメッセージを表示する方法

予定や保存確認を表示したい場合は、メッセージ表示とPCを終了する操作を分けます。

本稿のPowerShellは表示だけで、シャットダウンや再起動は実行しません。

目次

サインイン時と終了前の表示を分ける

目的操作適用範囲
サインイン後の予定ログオン時のタスク対話中の本人に表示
作業終了前の保存確認メモを手動実行閉じた後に電源メニューへ
終了する全場面を監視この例の対象外更新・別アプリの終了は捕捉しない

終了前の例は手動で開くメモです。

Windowsの電源ボタンや更新による終了を自動で横取りし、保存を保証する仕組みではありません。

終了処理を含まないPowerShellの作業メモ

練習ZIPのReminder.ps1を新しいフォルダーに置きます。

Windows PowerShell 5.1で日本語を読み込むため、配布ファイルはUTF-8のBOM付きで保存しています。

param(
    [ValidateSet('SignIn','BeforeExit')]
    [string]$Mode = 'SignIn',
    [switch]$Preview
)
$messages = @{
    SignIn = '今日の予定を確認してください。'
    BeforeExit = '作業を保存し、保存先を確認してからWindowsの電源メニューで終了してください。'
}
$message = $messages[$Mode]
if ($Preview) {
    [PSCustomObject]@{ Mode = $Mode; Message = $message; ShutdownExecuted = $false }
    return
}
Add-Type -AssemblyName PresentationFramework
[void][System.Windows.MessageBox]::Show($message, '作業メモ')
# メッセージ表示だけ。シャットダウン・再起動は実行しない。

最初はコードを通常のPowerShell入力として実行し、Previewを指定してメッセージの内容だけを確認します。

SignInなら予定確認、BeforeExitなら保存確認となり、ShutdownExecutedはFalseです。

ファイル実行が許可されている環境では、powershell.exe -NoProfile -STA -File "C:\cgm-startup-practice\Reminder.ps1" -Mode BeforeExit -Previewで内容を確認できます。

実際の展開先へパスを置き換えてください。

Previewを外すと、メッセージを表示します。

今回のPCではファイル実行がポリシーで止まるため、同じコードの通常入力によるPreviewだけを実行確認し、表示画面は未確認です。

サインイン時のタスクを設定する場合

まず同じユーザーでメッセージ表示を手動確認します。

PowerShellが実行ポリシーで止まる場合は、この手順を続けず管理者へ確認し、Bypassなどで回避しません。

タスクスケジューラで「タスクの作成」を選び、名前をCGM作業メモなどにします。

全般で本人を指定し、「ユーザーがログオンしているときのみ実行する」を選びます。

トリガーは「ログオン時」で本人だけを対象にします。

操作のプログラムにはWindows PowerShellの実在するpowershell.exeを選び、引数は次の形にします。

-NoProfile -STA -File "C:\cgm-startup-practice\Reminder.ps1" -Mode SignInのパスを自分の展開先に置き換えます。

最上位の特権やシステムユーザーは使わず、タスクの「実行」で本人の画面へ出ることを先に確認します。

タスクが成功扱いでも、別セッションで起動すれば本人に画面が見えない場合があります。

実際のログオン、手動実行、タスク履歴をそれぞれ確認し、この記事の検証済み結果とは区別してください。

shutdownの待ち時間は保存確認にならない

以前の例はshutdownで60秒待ち、保存を促すメッセージを表示していました。

Microsoftの仕様では、待ち時間が0より大きいとアプリの強制終了が暗黙に有効になります。

したがって、待ち時間やコメントだけで未保存データの保護はできません。

本稿では終了予約を作るコマンドを練習例にせず、手動の保存確認と電源メニューを分けています。

既に終了予約を開始した場合は、待ち時間内に別のコマンドプロンプトでshutdown /aを実行すると取り消せます。

予約がない場合や時間切れでは取り消せないため、確認用として終了予約を作らないでください。

表示を止める・元へ戻す

メッセージを閉じれば、このスクリプト自体は終了します。

作成したタスクを止める場合は、その名前を確認して無効化し、既存の別タスクは変更しません。

使う前のXMLエクスポートや設定記録がある場合は、それと照合して戻します。

この作業ではタスク作成・ログオン・シャットダウンを実施しておらず、それらの動作は未検証です。

常駐アプリの見直しはNVIDIAの自動起動の記事、キーから練習処理を呼ぶ場合はAutoHotkey v2の記事を参照してください。

関連するWindows操作と従来の参考資料

以前の関連記事と外部コードの参照先です。

旧コードと本稿の練習ファイルは内容が異なるため、今回の手順では本稿のファイルを使います。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

仕事効率化のおすすめ書籍

仕事用PCの選び方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次