最近在工作中,我想知道是否有一个快速批处理命令,我可以使用这个命令来查看一些输出并快速确定哪个是最后登录的用户。用户没有漫游配置文件,并且本地配置文件通常需要手动恢复(我知道,我知道我和疯子一起工作)。这意味着在一些发生故障的计算机上启动 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 映像执行此操作。有什么想法吗?
答案1
你应该看看日志解析器实用程序。LogParser 是由一名 Microsoft 员工在业余时间编写的。它是一个 .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 个事件:
- ‘应用程序’事件日志远程服务器1和
- ‘系统’事件日志远程2。
- “安全”事件日志本地系统。
尝试一下(但将以下内容写在一行中):
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
请添加要处理的行,这样您就不会每 10 行就提示您输入更多输出。
LastLogins.bat
将合适的日志解析器查询放入批处理文件中并将其存储在您的某个位置将会很容易%PATH%
...
注意事项:
- 我还没有真正测试过上述查询;您可能需要根据自己的目的对它们进行调整。
- 过去,我曾在 Windows XP 和 Windows 2003 Server 上大量使用过 LogParser,效果很好。但我从未在 Vista 或 Windows 7 上使用过它。
- PowerShell 和
wmic.exe
实用程序将能够实现类似的功能。只是我个人更喜欢使用 logparser 来完成这类工作。