使用VM搭建域环境,一台DC-dc1,os:win2012r2,一台客户机-pc01,os:win7。
在DC上输入:get-process 可以获取本机进程,输入 get-process -computername pc01 无法获取远程客户机的进程。反之在客户机上输入 get-process -computername dc1 却可以获取dc上的进程。报错:无法连接到远程计算机。是客户机还没开启某些服务或端口吗?
如果先建立与pc01的会话,然后再使用invoke-command倒是可以运行命令,难道这个-computername无法直接使用吗?
×用微信扫描并分享
2 Answers
Best Answer
Get-Process命令获取远程进程信息,在内部实现上使用的是.NET中的
static System.Diagnostics.Process[] GetProcesses(string machineName)
很幸运,竟然可以在公司的机器上重现楼主遇到的问题:
PS> [System.Diagnostics.Process]::GetProcesses('127.0.0.1')
Exception calling "GetProcesses" with "1" argument(s): "无法连接到远程计算机。"
At line:1 char:1
+ [System.Diagnostics.Process]::GetProcesses('127.0.0.1')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : InvalidOperationException
的
通过error详情可以发现:
PS> $Error[0].Exception.InnerException
无法连接到远程计算机。
PS> $Error[0].Exception.InnerException.InnerException
未能从性能计数器获得进程信息。
PS> $Error[0].Exception.InnerException.InnerException.InnerException
找不到网络路径。
GetProcess方法依赖于远程机器上的远程注册表服务:
PS> Get-Service RemoteRegistry
Status Name DisplayName
------ ---- -----------
Stopped RemoteRegistry Remote Registry
RemoteRegistry:使远程用户能修改此计算机上的注册表设置。如果此服务被终止,只有此计算机上的用户才能修改注册表。如果此服务被禁用,任何依赖它的服务将无法启动。
手动启动该服务即可:
PS> [System.Diagnostics.Process]::GetProcesses('localhost')
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
84 9 1528 2172 53 5712 0 TXPlatform
207 21 53448 62620 865 6868 0 chrome
150 16 26840 31076 699 5396 0 chrome
166 19 2548 532 48 1572 0 residentAgent
323 34 9888 15420 69 1372 0 svchost
337 38 172556 1856 16555 2304 0 sqlservr
谢谢版主,问题解决了,但关于报错信息如何处理,如何解决还是不甚了解,这方面有啥书可以参考吗?