2012-04-02 52 views
1

我正在寫一個腳本,需要查詢幾個域用戶最後登錄到一臺機器時。我以爲我可以用\ docs和settings \ username的最近訪問日期來做到這一點,但是我們的備份工具讓這個計劃陷入困境。查詢最後登錄日期爲多個用戶

然後我看着使用WMI_UserProfile,但只查詢本地配置文件。所以這導致我到WNI_NetworkLoginProfile,但我似乎只能得到登錄用戶的登錄日期。是否有可能使用WNI_NetworkLoginProfile查詢多個用戶的上次登錄日期,還是有其他可以查詢的內容?

On Error Resume Next 

Set WshNetwork = CreateObject("Wscript.Network") 
strComputer = WshNetwork.ComputerName 

strDayOfMonth = Right("0" & Day(Date()),2) 
strMonth = Right("0" & Month(Date()),2) 
strYear = Right (Year(Date()),4) 
strDate = strDayOfMonth & "/" & strMonth & "/" & strYear 

oLast = DateAdd("d", -60, strDate) 

Set objRegEx = CreateObject("VBScript.RegExp") 
objRegEx.Global = True 
objRegEx.IgnoreCase = True 
objRegEx.Pattern = "NT AUTHORITY\SYSTEM|NT AUTHORITY\SYSTEM|NT AUTHORITY\LOCAL SERVICE|NT AUTHORITY\NETWORK SERVICE" 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkLoginProfile") 

For Each objItem in colItems 
dtmAccessTime = objItem.LastLogon 
strReturn = WMIDateStringToDate(dtmAccessTime) 
strUsers = objItem.Name 
Set colMatches = objRegEx.Execute(strUsers) 
If colMatches.Count < 1 Then 
    strfolder = objFolder.Name 
    Wscript.Echo objItem.Name & " " & strReturn 
End If 
Next 

' Format Time and Date 
Function WMIDateStringToDate(dtmStart) 
WMIDateStringToDate = CDate(Mid(dtmStart, 5, 2) & "/" & _ 
    Mid(dtmStart, 7, 2) & "/" & Left(dtmStart, 4) _ 
     & " " & Mid (dtmStart, 9, 2) & ":" & _ 
      Mid(dtmStart, 11, 2) & ":" & Mid(dtmStart, _ 
       13, 2)) 
End Function 

回答

1

試驗:使用命令行工具wmic爲:

C:\> WMIC PATH Win32_NetworkLoginProfile GET Name,LastLogon 

顯示我要在我的機器上的所有用戶數據。這讓我想知道這是否鎖定在你是否有管理權限。在Windows Vista/7/2008盒子上,這也可能意味着用戶訪問控制阻止您查看所有數據。

嘗試強制腳本以管理員身份運行。

+0

謝謝,運行,返回所有的用戶配置文件和日期。出於某種原因,我的腳本不會 – chemist 2012-04-02 12:15:11

+0

發佈您的腳本,讓其他人可以看看它。 – 2012-04-02 15:33:46

相關問題