miyapiのひとりごと

blogこと始め。コンピュータと映画、そしてお酒の好きなmiyapiが気ままに書きつづる日記。。。

【Windows】最後のログイン日時(lastLogonTimestamp)

2013-05-01 22:31:57 | Weblog

 

ActiveDirectory( 以下ADと略記)のユーザーアカウントやコンピュータアカウントは、登録はするものの、まめに無効化や削除をしないためゴミがたまりがちである。

そこで、長期間ログインしていないPCやユーザーがどれくらいあるか調べてみよう、ということになって、何か良い方法はないかとググってみた。

結論から書くと、

ADへの最終ログイン時間の調査には lastLogonTimestamp という属性を調べる。
この属性を調べるには以下のようなVBScriptを使えば良い。

'------------------------------------------------------------
Set objUser = GetObject("LDAP://cn=Ken Myer, ou=Finance, dc=fabrikam, dc=com")
Set objLastLogon = objUser.Get("lastLogonTimestamp")
 
intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart  
intLastLogonTime = intLastLogonTime / (60 * 10000000)
intLastLogonTime = intLastLogonTime / 1440
Wscript.Echo "Last logon time + 9h: " & DateAdd("h", 9, intLastLogonTime + #1/1/1601#)
'------------------------------------------------------------

なお、ADSIEditや csvde.exe などで lastLogonTimestampをシリアル値で入手した場合は、w32tm.exe で変換もできる。

<例>
w32tm.exe/ntte 128271382742968750
148462 05:57:54.2968750 - 2007 年 6 月 24 日 8時 57分: 54 午前 (現地時間)

 

以下、判ったことをメモ代わりに列挙。

- 最後のログオン日時を示す項目としてlastLogonTimestamp とlastLogonの2種類がある。前者はドメインコントローラ間で同期されるが、後者はされない(つまり、後者はログオンしたドメインコントローラだけで保持される値である)

- net user コマンドの実行結果にも「最終ログイン」という表示があるが、これは、lastLogon属性を表示しているため、ドメインコントローラにより結果が異なる。

- lastLogonTimestamp は Windows Server 2003 から導入された属性である。

- lastLogonTimestamp は 1601年1月1日間からのナノ秒単位のシリアル値が格納された値である。しかも時刻はUTCなので、年-月-日に変換したあと +9時間すると日本時間の表示になる。

- このシリアル値はExcelの関数(DateValue()など)では変換できない。(Excelの日付シリアル値は1900年からの計算になっているため)

 

それにしても、「最終ログイン日時の取得」という単純なテーマなのに、意外に大変だなぁ・・・。

では、今日はこのへんで。

 




最新の画像もっと見る

コメントを投稿