zoukankan      html  css  js  c++  java
  • PowerShell 远程执行命令

    PowerShell 远程执行命令

      最近在做一些自动化的测试工作,在代码实现的过程中需要远程启动/关闭一些服务或者测试机。

      我首先想到的是建立一个website,通过网站对一些服务进行操作,但是这样感觉比较重,而且重启一些例如IIS或者计算机的时候不是很安全。还有一种方式就是执行ssh命令或者bat命令。由于服务器是windows的,我就考虑是否可以使用PowerShell来实现。

    工具

      微软提供了一个一个叫WS-Management的协议,可以实现设备远程交换数据的方法。本身自带了一个叫 (Windows Remote Management service,简称 WinRM) 的服务。我们可以通过PowerShell来实现远程控制。

    Host:

      在host机器上我们首先检查下WinRM服务是否安装成功:

      

    Get-Service WinRM

      该服务默认情况下是开启的,如果没有开启可以到services列表里面进行开启,或者在powershell里面开启:

      Enable-PSRemoting –Force

      这个时候如果你的客户端和服务端的计算机都在工作域中,那么这时候的配置基本上是可以使用了。 如果不在域里面,则还需要做以下额外的操作:

    Client:

      在Client端执行以下命令, 将服务器机器添加到信任列表里:

    Set-Item wsman:localhostclient	rustedhosts *
    Restart-Service WinRM

      测试以下,服务通讯是否成功: 

      

    Test-WsMan xxx.xxx.xxx.xxx

     

      看到类似上面的信息,就表示两个计算机之间的通讯是通畅的。

      如果出现以下错误:

      

      根据提示去server端运行 winrm quickconfig,然后一路默认即可:

      

      然后我们就可以尝试使用命令远程连接计算机了:

    Enter-PSSession -ComputerName 10.112.20.84 -Credential administrator

      在弹出的登录框中输入host的密码就可以登录远程计算机了:

     

      但是这种方式需要手工输入密码,不是很方便,我们只需要将这些用户名密码参数化就可以实验脚本化登录了:

    $Username = '*********'
    $PWD = '********'
    $pass = ConvertTo-SecureString -AsPlainText $PWD -Force
    $Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
    Invoke-Command -ComputerName 10.112.20.84 -ScriptBlock { iisreset } -credential $Cred
  • 相关阅读:
    2.舵机
    1.呼吸灯
    Python学习笔记——Matplot库
    计算机仿真技术学习笔记(一)
    48、从堆和栈上建立对象哪个快?(考察堆和栈的分配效率比较)
    47、抖动你知道是什么吗?它也叫颠簸现象
    46、交换空间与虚拟内存的关系
    44、程序从堆中动态分配内存时,虚拟内存上怎么操作的
    43、一般情况下在Linux/windows平台下栈空间的大小
    42、一个由C/C++编译的程序占用的内存分为哪几个部分?
  • 原文地址:https://www.cnblogs.com/wanghao4023030/p/11151099.html
Copyright © 2011-2022 走看看