特別な勤務形態の従業員が所属している場合、勤務時間外に業務に従事させないように制限したくなるときがあるかもしれません。こういった場合、ユーザーのログオン時間帯を制限することで、コンピューターを利用させないようにすることができます。
GUI で設定する
GUI で設定するには、Active Directory ユーザーとコンピューター を利用します。Active Directory ユーザーとコンピューターからログオン時間を制限したいユーザーを選択し、プロパティ から、アカウント タブを開きます。
ログオン時間 を開くことで、現在の設定が確認できます。既定では制限なし (すべての時間にログオン可能) となっています。
平日 (月曜 – 金曜) の 10:00 – 16:00 のみログオンを許可したい場合は、以下の画像のように設定します。設定を変更するには、範囲を選択して ログオン許可/ログオン拒否 を選択すれば OK です。
コマンドで設定する
コマンドでログオン可能時間を設定する場合、NET USER コマンドを利用できます。NET USER コマンドの /TIMES オプションを使います。GUI の設定と同様に 平日の 10:00 – 16:00 のみログオンを許可する場合は、以下のようにします。
1 |
NET USER test-a /DOMAIN /TIMES:M-F,10:00-16:00 |
1 |
NET USER test-a /DOMAIN |
PowerShell で設定する
PowerShell の場合は Set-User で設定できます。ですが、コマンドでの実行と比較すると面倒ですので、あまりお勧めしません。平日の 10:00 – 16:00 のみログオンを許可する場合は、以下のようにします。
1 2 3 4 5 6 7 8 9 |
$Hours = New-Object byte[] 21 $Hours[3] = 126 $Hours[6] = 126 $Hours[9] = 126 $Hours[12] = 126 $Hours[15] = 126 $ReplaceHashTable = New-Object HashTable $ReplaceHashTable.Add("logonHours", $Hours) Set-ADUser -Identity "test-a" -Replace $ReplaceHashTable |
$Hours 配列の意味としては以下のようなイメージです。
1 時間を 1 bit として扱い、8 時間毎に扱うために byte 型の配列として $Hours を宣言しています。1 日 3 byte ですので 1 週間で 21 byte ということになります。この中で $Hours[0] は 日曜日の 9:00 – 17:00 を意味し、$Hours[1] は 日曜日の 17:00 – 月曜日の 1:00 を意味します。$Hours[0] が 日曜日の 0:00 スタートではなく、9:00 スタートになっているのはシステム時間を日本時間 (+9:00) に設定しているためです。
今回の場合、月曜日の 10:00 – 16:00 を指定しますので、$Hours[3] の値を変更します。設定する値は 01111110 (= 126) としています。先頭から 9:00 – 10:00 は 0、10:00 – 11:00 は 1 というように考えます。左から 0 x 2^0 + 1 x 2^1 + 1 x 2^2 … = 126 ということですね。数学のように 右から桁数が増えていくわけではないことに注意してください。つまり、9:00 – 16:00 とする場合は、11111110 (=127) になります。
注意すべきこと
ログオン拒否時間にログオンしようとすると、以下のようなメッセージが表示されるようになります。(画像はリモート デスクトップ接続時のものですが、ローカル ログオン時も同様です)
強制ログオフにはならない
この設定はログオン可能時間の制限であるため、既にログオン中のユーザーがログオン拒否時間になった途端に強制ログオフされたりはしません。ですので、コンピューター利用時間の制限には使えません。
切断されたリモート デスクトップ接続の再接続には有効
リモート デスクトップ接続をログオフではなく切断していた場合の再接続にはこの設定は有効に働きます。「ログオフしたわけではないので接続できるのでは?」と思いましたが、接続できませんでした。