none
如何抓取Users or Computers 在DC上最後Login or Connect的時間?? RRS feed

  • 問題

  • DC上的 User 或 Computer 有點亂, 但是又無法確定是不是Active的帳號

    所以想知道是否有wmi或是vbs的語法可以抓取User 或 Computer 最後一次Login or connect上DC的時間呢??

    請賜教, 謝謝 !!

    2007年7月18日 上午 03:47
2007年7月18日 上午 05:30
  • 補充說明, 同時也可以透過 ldifde 或是 csvde 去抓取 AD 裡面以下兩個 attribute. 由於 pwdLastSet 抓取出來是一長串的數字, 叫做 large integer. 你可以透過下面的連結範例將他轉成實際的時間&日期.

    電腦帳號預設情況下每三十天需要變更一次 (只要有登入網域, 電腦或自動向 AD 變更), 如果你網域中有 NT 的電腦, 要特別注意. 因為 NT 的電腦是每七天變更一次電腦密碼.

    我的做法是這樣的:

    寫個 vb 程式然後設定排程, 每天晚上抓取 AD 中的物件; 然後存放置 SQL 資料庫; 然後寫個 ASP 網頁, 爾後你只要到那網頁去就可以看到想要看的東西.

    • objectCategory=computer
      • 抓取 LDAP 中屬性為電腦的資料
    • pwdLastSet
      • 取得上次密碼變更日期
    • userAccountControl
      • 可以知道該電腦帳號是否被設定為 "password never expire" 或是停用等訊息

     

     

    Convert large integer

    How to use the UserAccountControl flags to manipulate user account properties

    2007年7月20日 上午 01:14
  • 2007年7月18日 上午 05:30
  • 謝謝 Alex 兄,以上兩種方法是可行的.

    但是主要還是Computers, 因為有太多電腦根本無法得知是不是還活著

    所以有辦法判斷 電腦 最後一次連上DC的時間嗎??

    2007年7月18日 上午 05:49
  • 向微軟索取 GetStaleAccounts2.wsf 程式;

    然後執行下列的指令就產生 csv 的檔案, 其中就包括你要的訊息 [stale machine account].

     

    cscript.exe setStaleAccounts2.wsf /filename:"c:\output\staleusers.xml" /domain:ABC.com /threshold:30 /flags:2 /outputdir:"c:\output" /showdetail:true

    2007年7月19日 下午 04:56
  • 補充說明, 同時也可以透過 ldifde 或是 csvde 去抓取 AD 裡面以下兩個 attribute. 由於 pwdLastSet 抓取出來是一長串的數字, 叫做 large integer. 你可以透過下面的連結範例將他轉成實際的時間&日期.

    電腦帳號預設情況下每三十天需要變更一次 (只要有登入網域, 電腦或自動向 AD 變更), 如果你網域中有 NT 的電腦, 要特別注意. 因為 NT 的電腦是每七天變更一次電腦密碼.

    我的做法是這樣的:

    寫個 vb 程式然後設定排程, 每天晚上抓取 AD 中的物件; 然後存放置 SQL 資料庫; 然後寫個 ASP 網頁, 爾後你只要到那網頁去就可以看到想要看的東西.

    • objectCategory=computer
      • 抓取 LDAP 中屬性為電腦的資料
    • pwdLastSet
      • 取得上次密碼變更日期
    • userAccountControl
      • 可以知道該電腦帳號是否被設定為 "password never expire" 或是停用等訊息

     

     

    Convert large integer

    How to use the UserAccountControl flags to manipulate user account properties

    2007年7月20日 上午 01:14
  •  Anson Lin 寫信:
    主要還是Computers, 因為有太多電腦根本無法得知是不是還活著

    所以有辦法判斷 電腦 最後一次連上DC的時間嗎??

    參考看看:

    Code Snippet
    ' 請將下行的 <ComputerDN> ,換成您實際的環境,例如:cn=alex,ou=MIS,dc=alexchuo,dc=com
    strComputerDN = "<ComputerDN>"
    set objOU = GetObject("LDAP://" & strComputerDN)
    objOU.Filter = Array("Computer")

    For Each objComputer in objOU
      Set objPC = GetObject(objComputer.ADsPath)
      Set objLastLogon = objPC.Get("lastLogonTimestamp")

      intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
      intLastLogonTime = intLastLogonTime / (60 * 10000000)
      intLastLogonTime = intLastLogonTime / 1440 
      Wscript.Echo "上次登入時間:" & intLastLogonTime + #1/1/1601#
    Next

    2007年7月20日 上午 01:38
  •  Alex Chuo 寫信:
     Anson Lin 寫信:
    主要還是Computers, 因為有太多電腦根本無法得知是不是還活著

    所以有辦法判斷 電腦 最後一次連上DC的時間嗎??

    參考看看:

    Code Snippet
    ' 請將下行的 <ComputerDN> ,換成您實際的環境,例如:cn=alex,ou=MIS,dc=alexchuo,dc=com
    strComputerDN = "<ComputerDN>"
    set objOU = GetObject("LDAP://" & strComputerDN)
    objOU.Filter = Array("Computer")

    For Each objComputer in objOU
      Set objPC = GetObject(objComputer.ADsPath)
      Set objLastLogon = objPC.Get("lastLogonTimestamp")

      intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
      intLastLogonTime = intLastLogonTime / (60 * 10000000)
      intLastLogonTime = intLastLogonTime / 1440 
      Wscript.Echo "上次登入時間:" & intLastLogonTime + #1/1/1601#
    Next

     

    試過了這一個script, 但是不知道怎麼搞的抓出來的intLastLogonTime都是為0

    加上intLastLogonTime + #1/1/1601#就會變成 1601/1/1

    2007年7月20日 上午 04:19