12

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

  • 双方可以互相ping通。
  • 在双方,防火墙都被禁用。
  • 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:找不到网络路径。 ”。

错误截图: 在此处输入图像描述

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

4

2 回答 2

14

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

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

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

这是此解决方案的屏幕截图: 解决方案截图

于 2013-05-29T07:28:07.513 回答
11

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

显然,在某些 cmdlet(如 Get-Service)中通过 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 : 未找到网络路径。

于 2015-04-28T12:48:16.293 回答