关于computername参数的使用问题


PowerShell交流中心关于computername参数的使用问题
0
viacocha asked 4年 ago

使用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
1
Best Answer
Mooser Lee 管理员 answered 4年 ago

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
viacocha replied 4年 ago

谢谢版主,问题解决了,但关于报错信息如何处理,如何解决还是不甚了解,这方面有啥书可以参考吗?

0
Mooser Lee 管理员 answered 4年 ago

MSDN上有一段话:

However, Windows policies and configuration settings must allow remote connections, and you must still have the appropriate credentials.

你肯定使用的是同一个域账号,这样肯定没有账户权限的问题。所以看看组策略的配置中,是否允许远程连接,再看看Evenlog中有没有什么相关具体一点的错误消息。

viacocha replied 4年 ago

组策略就是用默认的策略,没有进行特殊配置,事件查看器也没发现有特别的错误记录,不知道咋搞了。