2016年5月26日木曜日

各PC、各ユーザのログオン状況を確認する

誰がどのPCを利用中で、どのPCが空きなのか分かるようにしたい時に使用するプログラム。
以下のプログラムを、状態把握したいPCのグループポリシーに登録すると履歴が残るようになります。
<job>
<script>
fs = new ActiveXObject('Scripting.FileSystemObject')
net = new ActiveXObject('WScript.Network')
d = new Date()
path = fs.getParentFolderName(WScript.ScriptFullName)
ws = fs.OpenTextFile(path + '/履歴.txt', 8, true)
モード = WScript.Arguments(0)
二桁 = function(s){s='0'+s;return s.slice(s.length-2,s.length)}
ws.Write(
[
[d.getFullYear(),二桁(d.getMonth()+1),二桁(d.getDate())].join('/')+' '+[二桁(d.getHours()),二桁(d.getMinutes()),二桁(d.getSeconds())].join(':'),
モード,
net.userName,
net.computerName
].join('\t')+'\r\n'
)
ws.Close()
pathPC = path+'/computerName/'+net.computerName+'/'+net.userName
pathUser = path+'/userName/' +net.userName +'/'+net.computerName
makeFolders = function(path){
var arr=path.replace(/\\/g,'/').split('/'), i=1
if(!arr[0] && !arr[1]){i=4}
for(var L=arr.length;i<L;i++){
if(!fs.FolderExists(arr.slice(0,i).join('\\'))){
fs.CreateFolder(arr.slice(0,i).join('\\'))
}
}
}
switch(モード){
case 'ログオン':
makeFolders(pathPC +'/1')
makeFolders(pathUser+'/1')
break
case 'ログオフ':
fs.FolderExists(pathPC ) ? fs.DeleteFolder(pathPC ) : 0
fs.FolderExists(pathUser) ? fs.DeleteFolder(pathUser) : 0
break
}
</script>
</job>
1.グループポリシーを開く


2.ユーザーの構成 → Windowsの設定 → スクリプト(ログオン/ログオフ)


3.「編集」ボタンをクリック


4.「スクリプト名」にスクリプトのUNCパスを入力する。パラメーターは「ログオン」の「スクリプトの編集」画面では「ログオン」を入力。「ログオフ」の方は「ログオフ」にする。


以上で、次回のログオン・ログオフ時から以下のような履歴が残ります。
[履歴]
スクリプトと同じフォルダ
├ computerName
| ├ PC1
| | └ User1
| └ PC2
└ userName
  ├ User1
  | └ PC1
  ├ User2
  └ User3
上記の場合、PC1はUser1がログオン中(「ユーザーの切り替え」でユーザー選択画面になっていてもこの状態)
PC2は誰もログオンしていない。
User1はPC1にログオン中。リモートデスクトップなどでPC2にログオンすれば、userName\User1の下にPC2のフォルダが作成される。
User2、User3はどのPCにもログオンしていない。
User1がPC1からログオフすると、computerName\PC1\User1は削除される。

0 件のコメント:

コメントを投稿