• 欢迎访问IT圈老男孩的新博客,本博客推荐使用最新版火狐浏览器或Chrome浏览器访问本网站,并欢迎各位老铁加入QQ交流群 QQ群
  • 博客新开通微信、QQ、微博、GitHub登陆接口,欢迎体验 登陆地址
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本站吧

如何使用PowerShell检查Windows事件日志

Windows Server IT圈老男孩 3个月前 (04-12) 490次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

Windows事件日志是管理员用来分析问题和查看问题来源的一个工具之一。但它不是您查询问题的唯一方法。在本文中,我将向您展示如何使用PowerShell和Get-EventLog来执行一些事件日志分析。

Windows中的事件查看器

首先,有两种方法可以访问Windows中记录的事件 – 通过事件查看器和使用Get-EventLog / Get-WinEvent cmdlet。事件查看器是一个直观的工具,可让您找到所需的所有信息,前提是您知道要查找的内容。但是,使用PowerShell搜索日志具有一定的优势 – 您可以使用控制台更快地检查本地或远程计算机上的事件。如果您考虑服务器健康监控,这是一项宝贵的资产。PowerShell可让您生成有关键时间的最重要事件的报告。

Get-WinEvent & Get-EventLog

您可能想知道Get-WinEvent和Get-EventLog之间有什么区别。Get-WinEvent是Get-EventLog更新的版本。cmdlet以类似的方式工作,Get-EventLog在大多数情况下都能解决问题。根据TechNet消息来源,主要区别在于Get-WinEvent与“Windows Vista中引入的Windows事件日志技术”配合使用。为了获得更清晰的解释,您可以使用两个简单的cmdlet:

Get-EventLog -list
Get-WinEvent -ListLog * | where {$_.RecordCount -gt 0}

正如您所看到的,Get-WinEvent在它可以访问的数据量方面是一个明显的赢家。

请注意,这两个cmdlet中的某些属性名称不同,因此如果要将Get-WinEvent的语法与Get-EventLog cmdlet一起使用,则可能需要进行一些转换。如果您想知道如何过滤结果,只需将cmdlet传递给Get-Member:

Get-EventLog application -newest 1 | Get-Member

尽管Get-EventLog是一个“遗留cmdlet”,但在大多数诊断案例中它仍然像魅力一样。它还有一个明显的优点:您可以使用-After和 – Before属性按日期过滤结果。多亏了这一点,与日期相关的查询比管道所有结果并尝试筛选它们要快得多。

在开始搜索特定事件的日志之前,最好先了解结构并了解日志记录机制的工作原理。事件查看器是帮助您入门的正确工具。

事件查看器

日志信息量可能非常大。这意味着数据过滤是您的首要任务。为了熟悉结构,您可以使用事件查看器。

启动事件查看器的最快方法是使用 Win + R组合键并执行eventvwr:

此操作将打开事件查看器:

左侧的树允许您浏览所有事件查看器的条目。最常用的日志是Application,System和Security。

使用PowerShell诊断多台计算机上的问题

设置Get-EventLog或Get-WinEvent cmdlet的最大挑战是过滤结果。首先,你必须知道要寻找什么,接下来 – 你必须确保你的查询不会导致PowerShell控制台抛出适合。运行诊断程序的一种方法是使用以下脚本:

$servers = Get-TransportService;
foreach ($server in $servers)
{Write-Host "Scanning the event log of: " -NoNewLine; Write-Host $server;
Get-EventLog system -ComputerName $server -After (Get-Date).AddHours(-12) | where {($_.EntryType -Match "Error") -or ($_.EntryType -Match "Warning")} | ft  -wrap >> "C:/$server.csv";
Get-EventLog application -ComputerName $server -After (Get-Date).AddHours(-12) | where {($_.EntryType -Match "Error") -or ($_.EntryType -Match "Warning")} | ft  -wrap >> "C:/$server.csv"}

该脚本会在系统和应用程序日志中提取有关服务器列表中过去12小时内生成的所有错误和警告类型事件的信息。您可以将Get-TransportService cmdlet替换为要诊断的其他计算机列表。

使用PowerShell检查登录和注销时间

有很多方法可以检查某台机器何时打开。如果您只需要检查用户第一次登录特定日期,请使用以下cmdlet:

Get-EventLog system -after (get-date).AddDays(-1) | where {$_.InstanceId -eq 7001}

要了解计算机何时打开特定日期,您可以选择第一个记录的事件:

$today = get-date -Hour 0 -Minute 0;
Get-EventLog system -after $today | sort -Descending | select -First 1

那些cmdlet; 但是,如果要监视共享计算机的使用情况,则无法使用。

您可以扫描安全事件,查找4624(登录)和4625(注销)事件ID。但是,安全日志通常包含最多的记录,并且通过它可能非常耗时。幸运的是,系统日志还存储登录和注销数据,并指定日志条目的确切来源允许相对快速的搜索。下面的脚本返回目标计算机上的登录和注销事件列表,其中列出了过去七天的确切时间和用户。

$logs = get-eventlog system -ComputerName <name of the monitored computer> -source Microsoft-Windows-Winlogon -After (Get-Date).AddDays(-7);
$res = @(); ForEach ($log in $logs) {if($log.instanceid -eq 7001) {$type = "Logon"} Elseif ($log.instanceid -eq 7002){$type="Logoff"} Else {Continue} $res += New-Object PSObject -Property @{Time = $log.TimeWritten; "Event" = $type; User = (New-Object System.Security.Principal.SecurityIdentifier $Log.ReplacementStrings[1]).Translate([System.Security.Principal.NTAccount])}};
$res

结果:

如果需要更详细的结果,可以为锁定和解锁事件添加安全日志事件ID 4800和4801。请注意,这将要求您运行另一个Get-EventLog脚本以从安全日志中获取信息。它还将显着增加PowerShell控制台完成任务所需的时间。


IT圈老男孩 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何使用PowerShell检查Windows事件日志
广告
喜欢 (0)
[daodefangxiang]
分享 (0)
IT圈老男孩
关于作者:
版主是一位微软技术爱好者,钻研者。2018年度获得微软最有价值专家(Microsoft MVP),目前就职于国资委旗下的一家子公司,具体丰富的微软UC项目经验,在公司主要负责微软UC项目的架构设计、实施、问题排查等工作。
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址