PowerShell远程处理允许您在远程Windows系统上运行PowerShell命令或访问完整的PowerShell会话。它类似于用于访问其他操作系统上的远程终端的SSH。
默认情况下,PowerShell是锁定的,因此您必须在使用它之前启用PowerShell远程处理。如果您使用的是工作组而不是域(例如,在家庭网络上),则此设置过程会稍微复杂一些,但我们将引导您完成此过程。
相关:PowerShell与Windows命令提示符有何不同
在要远程访问的PC上启用PowerShell远程处理
第一步是在要进行远程连接的PC上启用PowerShell远程处理。在该PC上,您需要使用管理权限打开PowerShell。
在Windows 10中,按Windows+X,然后从高级用户菜单中选择PowerShell(Admin)。
在Windows7或Windows8中,点击开始,然后键入“powershell”。右键单击结果并选择“以管理员身份运行”。
在PowerShell窗口中,键入以下cmdlet(PowerShell命令的名称),然后按Enter键:
Enable-PSRemoting -Force
此命令启动WinRM服务,将其设置为随系统自动启动,并创建允许传入连接的防火墙规则。cmdlet的-Force部分告诉PowerShell执行这些操作,而不会提示您执行每个步骤。
如果您的PC是域的一部分,则这是您必须执行的所有设置。您可以直接跳过以测试您的连接。如果您的计算机是工作组的一部分(它们可能位于家庭或小型企业网络上),则需要执行更多设置工作。
注意:在域环境中成功设置远程处理完全取决于您的网络设置。远程处理可能会由管理员配置的组策略自动禁用(甚至启用)。您也可能没有以管理员身份运行PowerShell所需的权限。一如既往,在尝试任何此类操作之前,请与您的管理员核实一下。他们可能有很好的理由不允许这种做法,或者他们可能愿意为你建立这种做法。
设置您的工作组
如果您的计算机不在域中,则需要再执行几个步骤才能进行设置。您应该已经在要连接的PC上启用了远程处理,如我们在上一节中所述。
相关:Windows中的专用网络和公共网络有什么不同?
注意:要使PowerShell远程处理在工作组环境中工作,您必须将您的网络配置为专用网络,而不是公共网络。有关不同之处的更多信息-以及如果您已经设置了公共网络,如何更改为专用网络-请查看我们关于专用网络与公共网络的指南。
接下来,您需要在要连接的PC和要连接的一台(或多台)PC上配置TrudHosts设置,以便这两台计算机彼此信任。您可以通过以下两种方式之一完成此操作。
如果您在家庭网络上,并信任任何PC可以远程连接,您可以在PowerShell中键入以下cmdlet(同样,您需要以管理员身份运行它)。
Set-Item wsman:\localhost\client\trustedhosts *
星号是所有PC的通配符。如果您要限制可以连接的计算机,则可以将星号替换为逗号分隔的已批准PC的IP地址或计算机名称列表。
运行该命令后,您需要重新启动WinRM服务以使新设置生效。键入以下cmdlet,然后按Enter键:
Restart-Service WinRM
请记住,您需要在要连接的PC上运行这两个cmdlet,也需要在要连接的任何PC上运行这两个cmdlet。
测试连接
现在您已经为PowerShell远程处理设置了PC,现在是测试连接的时候了。在要从中访问远程系统的PC上,在PowerShell中键入以下cmdlet(将“Computer”替换为远程PC的名称或IP地址),然后按Enter键:
Test-WsMan COMPUTER
这个简单的命令测试WinRM服务是否在远程PC上运行。如果成功完成,您将在窗口中看到有关远程计算机的WinRM服务的信息-表示WinRM已启用,并且您的PC可以通信。如果命令失败,您将看到一条错误消息。
执行单个远程命令
要在远程系统上运行命令,请使用以下语法的*Invoke-Command命令cmdlet:
Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME
“计算机”代表远程PC的名称或IP地址。“COMMAND”是您要运行的命令。“username”是要在远程计算机上运行该命令的用户名。系统将提示您输入用户名的密码。
这里有一个例子。我想在IP地址为10.0.0.22的远程计算机上查看C:\目录的内容。我想使用用户名“wjgle”,因此我将不使用以下命令:
Invoke-Command -ComputerName 10.0.0.22 -ScriptBlock { Get-ChildItem C:\ } -credential wjgle
启动远程会话
如果要在远程PC上运行多个cmdlet,则可以启动远程会话,而不是重复键入Invoke-Command cmdlet和远程IP地址。只需键入以下cmdlet,然后按Enter键:
Enter-PSSession -ComputerName COMPUTER -Credential USER
同样,将“computer”替换为远程PC的名称或IP地址,并将“user”替换为要调用的用户帐户的名称。
您的提示符将更改为指示您连接的远程计算机,并且您可以直接在远程系统上执行任意数量的PowerShell cmdlet。