Windows 使用 PowerShell 来管理另外一台 Windows 机器

远程管理是通过 WinRM 来实现的,这个和 Windows remote desktop 是有所不同的。

Windows remote desktop 是传统的远程桌面访问方式,你可以通过远程桌面来访问一台远程的 Windows 机器。

对一般的使用来说基本上是够了。但是一些比较底层的命令执行来说,可能你需要一些其他的工具,这个就是和我们远程到 Linux 上主机的意思是一样的。

WinRM 是什么

根据 WinRM SDK (msdn2.microsoft.com/aa384426),Windows 远程管理是“WS 管理协议的 Microsoft 实施,该协议是基于标准 SOAP、不受防火墙影响的协议,允许不同供应商的硬件和操作系统相互操作。”Java Specification Request 262(Web Services Connector for JMX Agent)承诺要与基于 Windows 的、WS-Management 服务直接交互。

WinRM 可用于 Windows Server® 2003 R2、Windows Vista® 和 Windows Server 2008,而且 WinRM 使您可以通过 Internet 管理计算机。WinRM 使用端口 80 完成此操作,端口 80 是一种标准的 Internet 服务端口,大多数防火墙都打开此端口(不过,可根据需要更改 WinRM 和默认传输机制 HTTP 使用的端口)。

简单来说 WinRM 是使用 HTTP 协议的,协议的端口是:5985。

我们可以通过 WinRM 来在 powershell 上到远程计算机上执行相关命令。

可以理解为,就是远程计算机为你开放了一个 powershell 的执行环境。这个权限还是非常大的。

从上面的图片上我们可以看到,我们已经登录到一个另一个计算机中的环境中,并在本地计算机上使用 powershell 在远程计算机上执行命令。

踩过的坑

我们都知道 Windows 的网络配置非常讨厌,经常连不上。

下面就是我们在配置的时候踩过的坑。

WinRM 服务

WinRM 是 Windows 上自带的服务,这个服务需要在远程计算机上和本地计算机上都启动才可以。

很多人都会认为,我是连接远程计算机的,我的机器不需要启动这个服务,只需要远程启动就可以了。

其实这是不可以的,必须保证通信的 2 台计算机上都启动这个服务。

PowerShell

如果你遇到了访问被拒绝的错误,但是你的用户名和密码都是正确的,就是怎么连都连不上。

那是因为你需要 PowerShell 以管理员权限来运行。

IP 白名单

白名单采取的是双向的白名单。

客户端的 IP 地址需要在服务的 IP 地址白名单上面,同时服务器的 IP 地址也要在客户端的 IP 地址白名单上面。

很多人都知道要在服务器上设置 IP 白名单,但是客户端怎么都连不上,那是因为服务器的 IP 地址不在你客户端的 IP 地址白名单上面。

敲黑板:白名单是双向的

简单一点的测试方法就是运行下面的命令

Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'

上面命令的目的就是等于开放所有的 IP 地址,虽然比较危险,但是也是测试的方向之一。

上面的命令需要在服务器和客户端上分别都执行,等于是所有机器都要执行,不管是主动连接的还是被连接的。