使用PowerShell和WMI读取安全日志

发布于 2024-07-20 15:43:51 字数 407 浏览 3 评论 0原文

我正在构建一个脚本来从多台计算机读取安全日志。 使用 Get-EventLog 命令时,我可以毫无问题地从本地计算机读取安全日志,但问题是我无法在远程计算机上运行它(该脚本适用于 powershell v1)。 下面的命令永远不会返回任何结果,尽管与任何其他日志文件一起,它可以完美地工作:

gwmi 类 Win32_NTLogEvent | 其中 {$_.LogFile -eq "Security"}

我做了一些研究,我似乎是一个模拟问题,但是 Get-WmiObject 的 -Impersonation 选项似乎没有实现。 无论如何,这个问题有解决办法吗? 解决方案可以以某种方式在远程计算机上运行 Get-EventLog,或者处理模拟问题以便可以访问安全日志。 谢谢

I'm building a script to read the Security Log from several computers. I can read the Security log from my local machine with no problem when using the Get-EventLog command, but the problem with it is that I can't run it against a remote machine (the script is for powershell v1). The command below never returns any results, although that with any other LogFile, it works perfectly:

gwmi -Class Win32_NTLogEvent | where {$_.LogFile -eq "Security"}

I've done some research, and I seems to be a impersonation issue, but the -Impersonation option for the Get-WmiObject does not seem to be implemented. Is there anyway around this problem? The solution could be running the Get-EventLog on a remote machine somehow, or dealing with the impersonation issue so that the security log can be accessed.
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月棠 2024-07-27 15:43:51

您可以直接使用 .NET,而不是通过 WMI。 下面的脚本块将为您提供安全日志中的第一个条目

$logs = [System.Diagnostics.EventLog]::GetEventLogs('computername')
$security = $logs | ? {$_.log -like 'Security'} 
$security.entries[0]

You could use .NET directly instead of going through WMI. The scriptblock below will give you the first entry in the security log

$logs = [System.Diagnostics.EventLog]::GetEventLogs('computername')
$security = $logs | ? {$_.log -like 'Security'} 
$security.entries[0]
兲鉂ぱ嘚淚 2024-07-27 15:43:51

您是否尝试过使用 -Credential 参数? 另外,使用filter参数而不是where-object,它只获取安全事件(where-object从所有日志中获取所有事件,然后才执行过滤)

gwmi Win32_NTLogEvent -filter "LogFile='Security'" -computer comp1, comp2 - 凭据域\用户

Have you tried to use the -Credential parameter? Also, use the filter parameter instead of where-object, it gets just the security events (where-object gets ALL events from all logs and only then performs the filtering)

gwmi Win32_NTLogEvent -filter "LogFile='Security'" -computer comp1,comp2 -credential domain\user

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文