如何在远程计算机上运行PowerShell命令

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。

相关文章