使用Powershell中的Get-EventLog远程读取事件日志

12

我有一个在服务器(test-server)上运行的PowerShell脚本,用于读取他的客户端(DC1)的日志文件。

  • Both sides can ping to each other.
  • On both sides, firewalls are disabled.
  • Remote Desktop and Remote Assistance are enabled on DC1.

    Get-EventLog System -ComputerName test-server -Source Microsoft-Windows-Winlogon # WORKS
    Get-EventLog System -ComputerName DC1 -Source Microsoft-Windows-Winlogon # DOESN'T WORK
    
我在测试服务器上运行此脚本。当我在测试服务器上读取本地日志文件时,它能够正常工作,但是如果我尝试从远程读取DC1的日志文件,则会出现错误“Get-EventLog:未找到网络路径。”。 错误截图: enter image description here 如何避免这个错误并使用Get-EventLog从测试服务器读取DC1的日志文件?

1
缺少权限?您能从测试服务器执行'dir \dc1\c$'吗? - Shay Levy
@Shay Levy 我刚刚尝试了一下,我得到了目录列表,所以我可以。 - Korki Korkig
1
你能列出dc1的进程/服务吗? - Shay Levy
3
DC1上启用了远程注册表服务吗?http://paragonwindows.wordpress.com/2012/03/01/how-to-open-event-log-of-remote-computer-using-powershell/ - Lars Truijens
@Lars Truijens,是的,那个方法起作用了,现在可以使用了!我已经将这项服务设置为“自动”。谢谢! - Korki Korkig
显示剩余5条评论
2个回答

15

@Lars Truijens的建议解决了我的问题。但是其他建议也很重要,需要检查以下事项:

  • 禁用或设置双方防火墙设置。
  • 在客户机上启用远程桌面和远程协助功能。
  • 您能ping到客户机吗?
  • 运行dir \\dc1\c$命令,以查看是否允许访问硬盘。(@Shay Levy的建议
  • 运行Get-Service -ComputerName YOURCOMPUTERNAME命令,以查看是否允许访问服务。(@Shay Levy的建议
  • 启动远程注册表服务。@Lars Truijens的建议并使其适用于我

这是此解决方案的截图: SolutionScreenshot


1
防火墙可能是必要的,但远程注册表是关键。 sc \<计算机名称> config remoteregistry start=demand sc \<计算机名称> start remoteregistry 这两个命令将使您开始运行。 - Takophiliac
对于Powershell: Get-Service -Name RemoteRegistry -ComputerName <Srv1> | Set-Service -StartupType Automatic(因为它可能被禁用) 然后 Get-Service -Name RemoteRegistry -ComputerName <Srv1> | Start-Service 来启动它。 - duct_tape_coder

11

启动 RemoteRegistry 服务在我的情况下没有帮助。

显然,通过ComputerName参数访问的远程操作和通过Invoke-Command等cmdlet访问的新形式的远程操作之间存在差异。

由于传统的远程访问是由单独的cmdlet实现的,因此它不一致(使用不同的技术并要求不同的要求),而且仅在选定的cmdlet中可用。用于远程访问的技术可能因cmdlet而异,并且您可能不知道。每个cmdlet都使用其作者选择的任何远程技术。大多数cmdlet使用远程过程调用(RPC),但也可能需要目标系统上的其他服务和设置。

从Windows PowerShell 2.0开始,有一种替代且更通用的访问远程系统的方式:Windows PowerShell Remoting。使用这种类型的远程操作,Windows PowerShell处理所有命令的远程访问。它使用相对较新且高度可配置的WinRM服务将您的命令传输到远程系统,在远程系统上运行一个分离的会话来执行代码,并将结果返回给调用系统。

http://powershell.com/cs/media/p/7257.aspx

当我从此命令切换时

get-eventlog -LogName System -computername <ServerName>

到这里

invoke-command {get-eventlog -LogName System} -ComputerName <ServerName>

我不再收到以下错误:

get-eventlog: 网络路径未找到。


(糟糕:我不小心误点了踩,现在我的投票被锁定了。我实际上是想点赞的):-/ - monojohnny
@monojohnny 我编辑了这个问题 - 你现在应该能够更改你的投票。 - default
1
Invoke-Command 是使用 WinRM 执行的,而 Get-Eventlog 则不是(我认为可能是使用远程注册表服务,鉴于上面的答案?) - duct_tape_coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接