iT邦幫忙

0

vbs 叫出上次登入時間

  • 分享至 

  • xImage

下述連結有提到當中的vbs 只能用在 Windows 2000 以上的 AD 環境中。如果硬要用的話,就需要改用 LDAP。有人知道LDAP的版本如何修改嗎??
如何知道上次登入系統的時間
謝謝

需求是如果有一百台SERVER ,每台SERVER上我都需要打N次
net user %username% /DOMAIN findstr "上次登入時間"
變成100*N次
想問vbscript 有辦法去撈一百台SERVER上的 上次登入時間嗎??
我想net user %username% /DOMAIN findstr "上次登入時間" 中的上次登入時間 應該是有存在電腦某個地方才是
謝謝
---------------解決方法-----------------

後來解決方法是
平常就有紀錄每台SERVER 記錄那些帳號允取那些使用者可以遠端登入
所以把這份表單記錄 跟我另外一篇文章中的程式跑出來的結果作比對
就知道那些人是從來沒有登入過,以及程式跑出來的結果可以得知那些人是超過90天未登入
程式碼如下

#
#	All User Profile & OS Info - Santhosh Sivarajan
#
#	www.sivarajan.com
#
Cls
$UserInfoFile = New-Item -type file -force "d:\UserInfo.csv"
$FailedComputers_File = New-Item -type file -force "d:\FailedCompuers.csv"
"ComputerName,Profile,LastAccessTime,OSVersion,SPVersion" | Out-File $UserInfoFile -encoding ASCII
"ComputerName" | Out-File $FailedComputers_File -encoding ASCII 
write-host -fore Blue "`t--------------------------------------------------------------------------------------------------"
write-host -fore Blue "`tComputer Name`tProfile`t`tLast Access Date`t`tOS Verions`t`t`t`tSP Level`t`tdatdate"
write-host -fore Blue "`t--------------------------------------------------------------------------------------------------"
Import-CSV "D:\input.csv" | % { 
    $Computer = $_.ComputerName
	$ppath1 = "$compuer\c$\Documents and Settings"
	$ppath2 = "$computer\c$\Users"
	$profileaccess1 = Test-Path \\$ppath1
	$profileaccess2 = Test-Path \\$ppath2
			
        If ($profileacces1 -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 "\\$ppath1\*" 
			foreach ($profilename in $profilenames) 
				{	
				$accountName = (get-item $profilename).PSChildName 
				$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$Computer`t`t$AccountName`t`t$LastAccesstime`t`t$CompOSF`t`t$CompSPF"
				write-host -fore Blue "`t--------------------------------------------------------------------------------------------------"
				}
		}
		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 "yyyy/MM/dd"
				$lastaccesstime = (get-item $profilename).LastAccessTime | 	get-date  –f "yyyy/MM/dd"
				"$Computer,$AccountName,$LastAccesstime,$compOSF,$compSPF,$Dat" | Out-File $UserInfoFile -encoding ASCII -append
				write-host -fore Green "`t$Computer`t`t$AccountName`t`t$LastAccesstime`t`t$CompOSF`t`t$CompSPF`t`t$Dat`t"
				write-host -fore Blue "`t--------------------------------------------------------------------------------------------------"
				}
		}
		Else 
		{
			Write-Host -fore Red "Can't access Computer -> $computer"
			"$Computer" | Out-File FailedComputers_File -encoding ASCII -append
		}
	}


看更多先前的討論...收起先前的討論...
小成 iT邦高手 10 級 ‧ 2017-09-26 09:32:02 檢舉
不知道你的OS有沒有 Powershell
有Powershell的話可以跑以下命令:
get-aduser -f * -pr lastlogondate |sort -property lastlogondate|ft samaccountname,lastlogondate -auto
小成 iT邦高手 10 級 ‧ 2017-09-26 09:38:13 檢舉
喔...我看到你另一個問題了....
好奇問一下你找伺服器上的帳號的最後登入時間要做甚麼啊?
而且還不能是AD帳號的最後登入時間??
可是就算是你用 net user %username% /DOMAIN 去抓,抓到的也是AD上的 lastLogonTimestamp
%username% 不是目前的使用者 ???,你要找上次的,那應該打的是上次的USER NAME,但因為你還沒查詢所以呢,你也不知道是誰,這各指令確定是正確的?
他最後不是說了嘛 他的VBS 目的是 "查得目前登入的使用者上次登入系統的時間"
假如目前是A 而上次是B,A上次是上午九點,而B是上午十點,那用了這個VBS 就會出現A 上次是上午九點
而不是出現 是 B 上午十點,如果這是你要的,那就能滿足你,但我看你前後的問題,我認為這個VBS鐵定不是你要的
http://www.ithome.com.tw/node/66424 這邊的說明應該是你要的,建議你根據上面的關鍵字去找你需要的VBS 或是 POWER SHEEL 的範例程式
Daniel iT邦新手 2 級 ‧ 2017-09-26 11:36:58 檢舉
我想樓主可能是想找出有哪些超過三個月沒有登入的帳號,然後停用吧。
依照題意,似乎沒有網域環境,所以才需要 100*n 次找每個帳號的最後登入時間。
不過樓主有 n 個使用者卻沒有網域環境而且還是登入 server,這也太匪夷所思了 XD。
有AD網域環境 但現在情境是 若干SERVER 允取若干USER 去登入 ,然後要去查每一台SERVER,這些USER 最後一次登入的時間,但現在作法似乎只能笨笨的,在每一台SERVER上 針對這些若干USER 去下指令net user xxxxx /domain | findstr "lastlogon"
小成 iT邦高手 10 級 ‧ 2017-09-26 13:29:15 檢舉
【查每一台SERVER,這些USER 最後一次登入的時間】<==??

你可以試著跑,net user xxxxx /domain | findstr "上次登入時間"
這個 xxxxx 是在這台SERVER沒登入過,但AD有帳號的。
你就知道我在說啥了...
如果只是要net user xxxxx /domain | findstr "上次登入時間"
那你直接隨便找一台,用Powershell的話可以跑以下命令:
get-aduser -f * -pr lastlogondate |sort -property lastlogondate|ft samaccountname,lastlogondate -auto
就好了

如果是要找出AD上三個月沒登入的帳號來停用,那我會用
dsquery user dc=xxx,dc=com,dc=tw -inactive 13

所以我很疑惑你到底要幹嘛?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
souda
iT邦高手 1 級 ‧ 2017-09-26 07:43:11

可以自己寫小程式掛在網域控制這樣每次登入就會被呼叫做紀錄!!

1
Daniel
iT邦新手 2 級 ‧ 2017-09-26 09:03:35

試試看這個,或許要改寫以適合你的需求

https://gallery.technet.microsoft.com/scriptcenter/Find-user-logon-duration-667b8c48

看來這個是很接近的答案了,就看樓主測試結果了

我要發表回答

立即登入回答