離線 Windows 安裝的上次登錄使用者
最近在工作,我想知道是否有一個快速批處理命令可以用來查看一些輸出并快速確定哪個是最後一個登錄的使用者。使用者沒有漫遊配置文件,本地配置文件經常需要手動恢復(我知道,我知道我和瘋狂的人一起工作)。這意味著在一些故障電腦上啟動WinPE,並猜測誰已經很長時間沒有在這里工作,並判斷我是否可以刪除他們的拒絕。所以,我想看看使用者配置文件目錄(
%SYSTEMDRIVE%\Users
或者%SYSTEMDRIVE%\Documents and Settings
,你有什麼)。顯然,這是非常不准確的。然後,我認為 NTUSER.DAT 在每次連續登錄時都會被修改。我可以這樣看嗎?for /d %subdir in (*) do dir /ah %subdir\ntuser.dat | findstr /i "ntuser.dat > lastlogon.log
我通常需要在沒有 whizbang 工具的破壞的 PE 圖像上執行此操作。有什麼想法嗎?
您應該看看LogParser實用程序。LogParser 是一位微軟員工在業餘時間編寫的。它是一個 .exe,可以作為獨立實用程序執行,無需“安裝”。它甚至會在從遠端位置(例如
\\server\share\logparser.exe
遠端 RDP 會話中)執行時執行\\tsclient\c\path\to\logparser.exe
LogParser 使用類似 SQL 的語法來查詢 Windows 事件日誌——***甚至是遠端的!***它可以將結果報告為格式良好的 .txt、.csv、.xml 甚至圖形圖表輸出。(它可以做的不僅僅是查詢事件日誌,但這是你現在需要的……)。嘗試一下:
logparser.exe -h examples
這將為您提供一些範例,說明您可以使用它做什麼。下一行將從您自己工作站的“應用程序”事件日誌中輸出前 5 個(最舊的 5 個)事件:
logparser.exe "SELECT TOP 5 * FROM \\.\application"
下一個查詢將輸出來自 3 個不同伺服器上 3 個不同事件日誌的前 20 個事件:
- remoteserver1的“應用程序”事件日誌和
- remote2的“系統”事件日誌。
- 本地系統的“安全”事件日誌。
試試看(但將以下全部寫在一行中):
LogParser.exe "SELECT TOP 20 * FROM \\remoteserver1\Application, \\remote2\System,\\.\Security ORDER by TimeGenerated DESC"
它將在您的 cmd.exe 視窗中按降序將查詢結果作為列表輸出。預設情況下,它會在 10 行後提示您以獲取更多輸出。哦,命令行參數甚至不區分大小寫,以防您更喜歡所有小寫字母以加快打字速度。這裡有一些可以幫助**您目前需求的東西。**同樣,在一行中輸入:
logparser "select top 50 timegenerated as logondate, extract_token(message, 0, ':') as logevent, extract_token(strings, 0, '|') as username, extract_token(strings, 1, '|') as domain from security where eventid not in (541;542;543) and eventtype = 8 and eventcategory = 2 order by timegenerated desc"
-rtp:-1
如果要覆蓋10
for rows to process的預設值,請添加,因此不會每 10 行提示您提供更多輸出。將合適的日誌解析器查詢放入批處理文件
LastLogins.bat
並將其儲存在您的%PATH%
…注意事項:
- 我還沒有真正測試過上述查詢;您可能需要根據自己的目的調整它們。
- 過去,我在 Windows XP 和 Windows 2003 Server 上大量使用過 LogParser,它執行良好。但我在 Vista 或 Windows 7 上沒有任何經驗。
- PowerShell 和該
wmic.exe
實用程序將能夠實現類似的事情。只是 logparser 是我自己對這樣的工作的偏好。