はじめに
リモートワークの増加に伴い、自宅からリモートデスクトップを介してコンピューターに接続して作業を行う方々が増えてきています。作業の終わりにサインアウトすることは、日々のルーチンの一部となっていることでしょう。しかし、遅くまでの作業が続くと、時折、サインアウトを忘れてしまうことがあります。これはセキュリティリスクをもたらすだけでなく、パソコンのパフォーマンスにも影響を及ぼす可能性があります。
そこで今回は、Windows PowerShell スクリプトとタスクスケジューラを使った自動サインアウトシステムをご紹介します。
具体的には、指定した時間に「1分後にサインアウトします」というメッセージが自動的に表示され、ユーザーが OK を選択するとシステムがサインアウトします。
PowerShell スクリプト
以下にスクリプトの全体像を示します:
# ----------------------------------------------------------------------------
# Author: tomo
# Creation Date: 2023-06-24
#
# This script is free to use and modify at your own discretion.
# No warranty is provided for the script's functionality.
# Use this script at your own risk.
# ----------------------------------------------------------------------------
Add-Type -AssemblyName PresentationFramework
# 引数でメッセージボックスのメッセージとタイトルを指定
function Show-MessageBox ($message, $title)
{
[System.Windows.MessageBoxButton] $button = 'OKCancel'
[System.Windows.MessageBoxImage] $image = 'Warning'
# MessageBox.Showメソッドを使用してメッセージボックスを表示
$result = [System.Windows.MessageBox]::Show($message, $title, $button, $image)
return $result
}
# タイトルとメッセージを指定してメッセージボックスを表示
$message = '1分後にサインアウトします。よろしいですか?'
$title = 'サインアウトのお知らせ'
$result = Show-MessageBox -message $message -title $title
# OKボタンが押されたら1分後にサインアウト
if ($result -eq 'OK')
{
Start-Sleep -Seconds 60
shutdown.exe /l
}
タスクスケジューラに登録
次に、この PowerShell スクリプトを Windows タスクスケジューラに登録する手順について説明します。
- 「スタートメニュー」から「タスクスケジューラ」を開きます。
- 「アクション」メニューから「基本タスクの作成」を選択します。
- タスク名と説明を入力し、「次へ」をクリックします。
- 「トリガー」の設定画面で「毎日」を選択し、「次へ」をクリックします。
- 「毎日」の設定画面で開始日と開始時間を設定し、「次へ」をクリックします。
- 「操作」の設定画面で「プログラムの開始」を選択し、「次へ」をクリックします。
- 「プログラム/スクリプトの開始」の設定画面で、「プログラム/スクリプト」の欄に “powershell”、そして「引数の追加(オプション)」の欄に以下を入力します:
-ExecutionPolicy Bypass -File "スクリプトのフルパス"
- 「次へ」をクリックし、設定を確認した後、「完了」をクリックします。
これらの手順を行うことで、指定した時間に自動的に PowerShell スクリプトが実行され、ユーザーに「1分後にサインアウトします。よろしいですか?」というメッセージが表示されます。
スクリプトの詳細解説
スクリプトの主要な部分は、メッセージボックスを表示するための関数と、サインアウト処理を実行するための条件分岐です。
# 引数でメッセージボックスのメッセージとタイトルを指定
function Show-MessageBox ($message, $title)
{
[System.Windows.MessageBoxButton] $button = 'OKCancel'
[System.Windows.MessageBoxImage] $image = 'Warning'
# MessageBox.Showメソッドを使用してメッセージボックスを表示
$result = [System.Windows.MessageBox]::Show($message, $title, $button, $image)
return $result
}
この部分はメッセージボックスを表示するための関数 Show-MessageBox
を定義しています。引数として $message
と $title
を取り、これらをメッセージボックスのメッセージとタイトルとして設定します。
ボタンは ‘OKCancel’ を指定しており、’OK’ と ‘Cancel’ の2つのボタンが表示されます。メッセージボックスのアイコンは ‘Warning’ を指定しています。
[System.Windows.MessageBox]::Show($message, $title, $button, $image)
でメッセージボックスを表示し、ユーザーからの応答を $result
に保存します。
次に、サインアウト処理を行う部分の説明に移ります。
# OKボタンが押されたら1分後にサインアウト
if ($result -eq 'OK')
{
Start-Sleep -Seconds 60
shutdown.exe /l
}
この部分では、ユーザーがメッセージボックスで ‘OK’ ボタンを押した場合にサインアウト処理を行います。まず、 Start-Sleep -Seconds 60
で 1 分間待機します。その後、 shutdown.exe /l
を実行してサインアウトします。
これらの部分がスクリプトの主要な要素です。スクリプト全体を通じて、特定の時間にこのスクリプトが実行されると、ユーザーにメッセージボックスが表示され、ユーザーが ‘OK’ を選択した場合に 1 分後にサインアウトするという処理が行われます。
以上