会社などでWindows 10や11のパソコンを管理していると、Windowsにサインインしたまま離席しているパソコンを見かけることがあります。
これはセキュリティ的によろしくないので、一定時間Windowsを操作していないときは、自動的にWindowsをロックするよう設定しておくのが一般的ですが、場合によってはロックではなくサインアウト(ログオフ)させたいケースもあるでしょう。
そこでここでは、タスクスケジューラを使ってWindows 10を一定時間操作していないときに、自動的にサインアウト(ログオフ)させる方法を紹介します。
目次
スクリプトファイルの準備
タスクスケジューラを使って、Windows 10が一定時間アイドル状態(キーボードやマウスの操作がない状態)のときに自動的にサインアウトさせたい場合、アイドル状態の時間をどのように検出するかが問題になります。
というのも、タスクスケジューラでは、タスク実行の条件としてアイドル状態の時間を指定できますが、この設定項目は想定通りに動作しないためです。
参考:タスクのアイドル状態 - Win32 apps | Microsoft Docs
そこで、指定したアイドル状態の時間が経過すると自動的にサインアウトするスクリプトファイルを作成しておきます。
スクリプトファイルは、メモ帳を起動して以下の内容を貼り付け「idle_signout.ps1」というファイル名で任意の場所に保存しておきます。
Add-Type @'
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace PInvoke.Win32 {
public static class UserInput {
[DllImport("user32.dll", SetLastError=false)]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
[StructLayout(LayoutKind.Sequential)]
private struct LASTINPUTINFO {
public uint cbSize;
public int dwTime;
}
public static int LastInputTicks {
get {
LASTINPUTINFO lii = new LASTINPUTINFO();
lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
GetLastInputInfo(ref lii);
return lii.dwTime;
}
}
}
}
'@
function IdleTime() {
return [System.Environment]::TickCount - [PInvoke.Win32.UserInput]::LastInputTicks;
}
while (($t = IdleTime) -lt $Args[0] ) {
$w = $Args[0] - $t
Write-Host ("IdleTime" + $w)
Start-Sleep -Milliseconds $w
}
logoff
スケジュールタスクの作成
スクリプトファイルを準備したら、タスクスケジューラでタスクを作成します。
まず、スタートメニューのプログラム一覧から「Windows管理ツール」>「タスクスケジューラ」を起動します。
「タスクスケジューラ」を起動したら、右側のメニューから「タスクの作成」をクリックします。
「タスクの作成」画面が開いたら、まず「全般」タブで次にように設定します。
- 名前:任意の管理しやすい名前
- タスク実行時に使うユーザーアカウント:Users
次に「トリガー」タブで「新規」をクリックします。
「新しいトリガー」画面では、次にように設定して「OK」をクリックします。
- タスクの開始:アイドル時
- 詳細設定:既定値
ここでの「アイドル時」とは、サインインしているユーザーによるキーボードやマウスからの操作がないアイドル状態が4分続いた時を指します。
次に「操作」タブで「新規」をクリックします。
「新しい操作」画面では、次のように設定して「OK」をクリックします。
- 操作:プログラムの開始
- プログラム/スクリプト:%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
- 引数の追加(オプション):-WindowStyle Hidden -ExecutionPolicy RemoteSigned -Command "<.ps1ファイルのパス> <サインアウトするまでのアイドル状態の時間(ミリ秒)>"
なお、引数で指定できるアイドル状態の時間の最小値は4分(240000ミリ秒)で、それ以下の値を設定した場合は、アイドル状態が4分続いた時点(タスクの実行がトリガーされた時点)で、サインアウトされます。
以上の設定が済んだら、画面右下の「OK」をクリックします。
設定したタスクは、タスクスケジューラ画面で、左の「タスクスケジューラライブラリ」をクリックすると、画面中央の一覧に表示されています。
以上で設定完了です。
あとがき
なお、スクリプトファイルの最終行に記述しているlogoffコマンドを、ロックや再起動、シャットダウンといったコマンドに変更すれば、一定時間操作していないときに、自動的にロックしたり、再起動、シャットダウンさせるといったこともできます。