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

时间:2013-05-28 11:16:22

标签: powershell powershell-remoting cmdlets

我有一个在服务器(测试服务器)上运行的powershell脚本,并读取其客户端(DC1)的日志文件。

  • 双方可以互相联系。
  • 双方都禁用防火墙。
  • 在DC1上启用了远程桌面和远程协助。

    Get-EventLog System -ComputerName test-server -Source Microsoft-Windows-Winlogon # WORKS
    Get-EventLog System -ComputerName DC1 -Source Microsoft-Windows-Winlogon # DOESN'T WORK
    

我在test-server上运行此脚本。正如您在test-server上读取本地日志文件时所看到的那样工作正常但如果我尝试远程读取DC1的日志文件,则会收到错误“ Get-EventLog:找不到网络路径。”。

错误的屏幕截图: enter image description here

如何使用Get-EventLog避免此错误并从测试服务器读取DC1的日志文件?

2 个答案:

答案 0 :(得分:10)

@Lars Truijens的建议解决了我的问题。但其他建议也很重要。

因此,如果您在尝试远程获取日志文件时遇到此类错误,请参阅清单:

  • 禁用或设置双方的防火墙设置。
  • 在客户端计算机上启用远程桌面和远程协助。
  • 您可以ping通客户端计算机吗?
  • 运行dir \\dc1\c$以查看您是否可以访问该网址 硬盘。 ( @Shay Levy的建议
  • 运行Get-Service -ComputerName YOURCOMPUTERNAME以确定您的身份 允许接触服务。 ( @Shay Levy的建议
  • 启动远程注册表服务。 @Lars Truijens的建议和 这使它适合我

以下是此解决方案的屏幕截图: SolutionScreenshot

答案 1 :(得分:9)

启动 RemoteRegistry 服务对我来说没有帮助。

显然,通过某些cmdlet(如Get-Service)中的ComputerName参数访问的远程处理与使用cmdlet(如Invoke-Command)访问的较新远程处理形式之间存在差异。

  

由于传统的远程访问是由单个cmdlet实现的,   它是不一致的(使用不同的技术和要求不同   要求)并且仅在选定的cmdlet中可用。技术   用于远程访问可以从cmdlet到cmdlet不等   你很高兴知道。每个cmdlet都使用任何远程技术   它的作者选择了。大多数cmdlet使用远程过程调用(RPC),但是   可能还需要目标上的其他服务和设置   系统

     

从Windows PowerShell 2.0开始,有一个替代版本   访问远程系统的通用方法:Windows PowerShell   远程处理。使用此类型的远程处理,Windows PowerShell可以处理   远程访问所有命令。它将您的命令传输到   远程系统使用相对较新且高度可配置的WinRM   service,在一个单独的会话中执行代码   远程系统,并将结果返回给调用系统。

     

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

当我从这个命令交换时

get-eventlog -LogName System -computername <ServerName>

到这个

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

我不再收到以下错误

  

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