当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    PowerShell 远程执行任务的方法步骤

    栏目:win服务器问题汇总 时间:2019-10-11 11:32

    在 linux 中我们可以使用 SSH 执行各种远程操作,同样的在 windows 平台上我们可以通过 PowerShell 获得类似的能力。本文将介绍通过 PowerShell 执行远程操作的基本信息。想了解 SSH 远程操作的同学,可以参考《SSH 远程执行任务》。

    基础

    MS 定义了一个叫做 WS-Management 的协议,这个协议为计算机设备远程交换管理数据提供了一个公开的标准。在 Windows 平台上,MS 通过 Windows 远程管理服务(Windows Remote Management service,简称 WinRM) 实现了 WS-Management 协议。这就是我们可以通过 PowerShell 执行远程操作的基础,因为 PowerShell 就是通过 WinRM 服务来进行远程操作的。

    检查 WinRM 服务

    我们可以通过下面的命令查看 WinRM 服务的状态:

    Get-Service WinRM

    服务器版的 Windows 系统默认是启动 WinRM 服务的,而普通版的系统默认则没有启动该服务。接下来我们将介绍如何以正确的姿势启动这个服务。

    配置系统接受远程命令

    类似于 SSH 的客户端/服务器架构,只需要在接受远程命令的主机上配置 WinRM 服务就可以了。其实就是让 WinRM 服务监听一个端口,跟 SSH daemon 是一样的!

    用管理员权限启动 PowerShell,执行下面的命令:

    Enable-PSRemoting –Force

    然后再检查 WinRM 服务就应该是运行状态:

    或者:

    防火墙规则也发生了变化:

    Enable-PSRemoting 命令不仅启动了 WinRM 服务,还帮我们设置好了防火墙规则。

    如果你的计算机已经加入了域,那么上面的配置就可以了。对于没有加入域的计算机还需要进行信任设置,然后重启 WinRM 服务:

    Set-Item wsman:\localhost\client\trustedhosts *
    Restart-Service WinRM

    测试远程连接

    PowerShell 还提供了一个命令用来测试远程主机是否开启了远程操作服务:

    Test-WsMan xxx.xxx.xxx.xxx

    上面图中的命令成功返回了,说明远程主机上已经配置好了允许远程访问的服务。如果返回错误的消息,则说明远程主机没有打开远程访问的服务。

    创建远程连接 Session

    这种方式类似于 SSH 的远程连接。使用 SSH 客户端建立一个到服务器的连接(session),然后执行各种操作。这是 SSH 最基本的使用方式,PowerShell 也提供了类似的支持让我们可以做同样的事情。

    Enter-PSSession -ComputerName my-svr -Credential nickli

    输入密码就可以建立连接了:

    接下来就可以在远程主机上执行任务了!

    远程执行单个命令

    能够在与远程主机建立的 session 中执行任务是个很好的开始。但很多时候我们只需要简单的执行单个命令,甚至是在脚本中执行这样的命令,怎么办呢?
    我们可以通过 Invoke-Command 命令,并指定其 -ScriptBlock 参数完成这个任务:

    复制代码 代码如下:
    Invoke-Command -ComputerName cd-lsr-svr -ScriptBlock { Get-Service WinRM } -credential nickli