已经为此挣扎了好几天了。
我收到以下错误:
PS C:\> get-process -ComputerName Win2012r2
get-process : Couldn't connect to remote machine.
At line:1 char:1
+ get-process -ComputerName 10.10.1.54
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-Process], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetProcessCommand
我已确认远程注册服务正在服务器上运行(我也尝试重新启动它)。
此外,我还创建了自定义防火墙规则,允许每个端口 5985 && 5986 上的 RCP 连接 https://stackoverflow.com/questions/22357063/get-process-to-remote-computer-doesnt-work-but-invoke-command-does
我还仔细检查了用户名Powershell Get-Process 无法连接到远程计算机
笔记
invoke-command -ComputerName Win2012r2 -ScriptBlock {Get-Process}
运行正常,但我真的需要让该get-process -computername
过程直接运行,因为它在其他人使用的另一个脚本中失败了
答案1
当我开始在 Win7 客户端测试 LocalHost 上自学 PS2 时,我也遇到了类似的错误。我通过启动远程注册表服务解决了这个问题。
答案2
我最终放弃了,并编写了一个新脚本,使用以下内容而不是Get-Process
直接调用:
invoke-command -ComputerName Win2012r2 -ScriptBlock {param($procName) Get-Process -Name $processName} -ArgumentList $ProcName
答案3
-ComputerName
使用Get-Process
RPC,而不是 WinRM。WinRM 使用 5985 和 5986,而不是 RPC。
默认情况下,RPC 端口是动态的。
查看 的“获取帮助” Get-Process
。
-ComputerName
Get-Process
此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令, 您也可以使用 ComputerName 参数。
Invoke-Command
确实使用 WinRM。因此,当您将代码更改为使用 Invoke-Command 时,您的脚本就开始工作了。
答案4
我唯一能想到的就是,要么是你运行此程序的帐户在目标 (Win2012r2) 上没有管理员权限,要么是防火墙阻止了它。尝试完全禁用防火墙以测试后者。