最近在工作,我想知道是否有一个快速的批处理命令,我可以用来看一些输出,并迅速确定哪个是最后一个用户login。 用户没有漫游configuration文件,本地configuration文件通常需要手动恢复(我知道,我知道我与疯狂的人一起工作)。 这意味着在一些失败的计算机上启动WinPE,并猜测谁在这里工作了很长时间,并判断是否可以删除他们的垃圾。 所以,我正在考虑查看用户configuration文件目录( %SYSTEMDRIVE%\Users或%SYSTEMDRIVE%\Documents and Settings ,你有什么)。 显然,这是非常不准确的。 然后,我认为NTUSER.DAT大部分都是在每次连续login时修改的。 我能看看这样吗?
for /d %subdir in (*) do dir /ah %subdir\ntuser.dat | findstr /i "ntuser.dat > lastlogon.log
我通常需要在一个破烂的PE图像上做这个,没有怪异的工具。 有什么想法吗?
您应该看看LogParser实用程序。 LogParser是微软员工在业余时间编写的。 这是一个.exe,可以作为一个独立的工具运行,而不需要“安装”。 它甚至会在从远程位置(如\\server\share\logparser.exe或从远程RDP会话内执行时运行,如\\tsclient\c\path\to\logparser.exe
LogParser使用类似SQL的语法来查询Windows事件日志 – 甚至是远程的! 它可以报告结果格式良好的.txt,.csv,.xml甚至graphics图表输出。 (它可以做的不仅仅是查询事件日志,但这是你现在需要的…)。 尝试一下:
logparser.exe -h examples
这将给你几个关于你可以用它做什么的例子。 下一行将从您自己的工作站的“应用程序”事件日志中输出前5个(最早的5个)事件:
logparser.exe "SELECT TOP 5 * FROM \\.\application"
下一个查询将从3个不同的服务器上的3个不同事件日志输出前20个事件:
尝试一下(但在一行中写下以下内容):
LogParser.exe "SELECT TOP 20 * FROM \\remoteserver1\Application, \\remote2\System,\\.\Security ORDER by TimeGenerated DESC"
它将按照降序的顺序将查询结果作为cmd.exe窗口中的列表输出。 默认情况下,它会在10行之后提示你输出更多的信息。 哦,命令行params甚至不区分大小写,如果你喜欢所有较低的套pipe更好的更快的打字。 这是可以帮助你目前的需求的东西。 再一次,input一行:
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如果您想要覆盖要处理的行的defaualt值10 ,所以不会每10行提示更多的输出。
将一个合适的日志parsing器查询放入一个batch fileLastLogins.bat并将其存储在%PATH%某个位置将很容易…
注意事项:
wmic.exe实用程序将能够实现类似的事情。 这只是logparser是我自己喜欢这样的工作。