iT邦幫忙

0

有關於last logon time

由於最近有個需求 是需要將很多台的SEVER上的 有登入過的帳號 列出其最後登入時間

Generate a list of local users and their last logon time
可是後來發現這個程式碼抓的是$_.LastWriteTime ,以致於有些SERVER不知道為何抓的時間不是很正確,並非是真的每個帳號的最後登入時間
因為該程式碼它是抓 下圖中user 資料夾的修改時間,但修改時間並不等於上次登入時間
因為有些SERVER明明昨天或者今天登入了 該修改日期仍然不會變動,或者有人知道要什麼解決這個問題嗎?明明有今天登入了,可是profile資料夾的修改日期卻不會變動

http://ithelp.ithome.com.tw/upload/images/20170924/20018576ANYgsDfRdE.jpg

請問有人知道什麼改嗎??
或者有現成的範例更好
如果可以一次清查多台SERVER上的lastlogontime更好

謝謝

不是要AD上每個帳號的最後登入時間喔,需要的是比如說公司有一百台SERVER
那我需要這一百台SERVER上的每個帳號的最後登出時間


後來找到另外一隻程式是抓user porfile的last access time 但也有上面那隻程式的問題
存取時間也不等於最後登入時間
但由於我的需求是要找大於90天的 所以應該勉強可以用 因為不可能超過90天資料夾的修改日期都不變吧?如果有再用的話,即使少用 90天未修改也真的要列出來查一下了
而且如下這隻程式可以匯入server清單 批次查詢 這樣就更快了 基本上算是有解決我的問題了
User Profile and Operating System (OS) Info – PowerShell Script


後來參考如下網站 抓每個帳號的Ntuser.dat檔
ntuser.dat

把前面提到可以批次匯入電腦名單的程式改成抓ntuser.dat ,應該算有解決原本的問題了
多加了一個dat 去抓 ntuser.dat的日期
ElseIf ($profileaccess2 -eq "TRUE")
{
$compOS = get-wmiobject Win32_OperatingSystem -comp $computer
$compOSF = $compOS.Caption
$compSP = get-wmiobject Win32_OperatingSystem -comp $computer
$compSPF = $compSP.ServicePackMajorVersion
$profileNames = get-item "\$ppath2*"
foreach ($profilename in $profilenames)
{
$accountName = (get-item $profilename).PSChildName
$ntuserfolder = "\$ppath2$accountName\NTUSER.DAT"
$Dat = Get-Item $ntuserfolder -force
$Dat = $Dat.LastWriteTime| get-date –f "MM/dd/yyyy"
$lastaccesstime = (get-item $profilename).LastAccessTime | get-date –f "MM/dd/yyyy"
"$Computer,$AccountName,$LastAccesstime,$compOSF,$compSPF" | Out-File $UserInfoFile -encoding ASCII -append
write-host -fore Green "t$Computertt$AccountNamett$LastAccesstimett$CompOSFtt$CompSPFtt$Datt"
write-host -fore Blue "`t--------------------------------------------------------------------------------------------------"
}

尚未有邦友回答

立即登入回答