PowerShell 远程执行命令

PowerShell 远程执行命令

https://www.cnblogs.com/wanghao4023030/p/11151099.html

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

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

工具

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

Host:

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

  

Get-Service WinRM

 

PowerShell 远程执行命令_第1张图片

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

  Enable-PSRemoting –Force

 

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

Client:

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

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

 

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

  

Test-WsMan xxx.xxx.xxx.xxx

 

 

 PowerShell 远程执行命令_第2张图片

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

  如果出现以下错误:

  

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

  PowerShell 远程执行命令_第3张图片

 

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

Enter-PSSession -ComputerName 10.112.20.84 -Credential administrator

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

 

 PowerShell 远程执行命令_第4张图片

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

$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

PowerShell连接远程主机运行远程命令

https://www.cnblogs.com/makesense/p/12820404.html

PowerShell主要采用Web Services for Mangement(WS-MAN)进行远程处理,WS-MAN完全基于Http(默认5985)或者Https(默认5986)进行工作,这样保证在需要的情况下,能够轻易透过防火墙进行作业(因为每种协议都使用唯一的端口进行通信)。微软对WS-MAN的实现是Windows Remote mangement(WinRM)。WinRM是一个基于SOAP的后台服务。

 

PowerShell连接常规远程主机

1. 在远程机器上以Administrator角色打开PowerShell执行以下命令,启动允许远程连接

Enable-PsRemoting

2. 在客户机器 (本地) 执行以下命令,将远程机器IP地址加入可信主机列表

Set-Item wsman:\localhost\Client\TrustedHosts -value 

3. 在客户机器 (本地) 输入以下命令, 在弹出对话框输入密码,以交互的方式连接远程主机

Enter-PSSession -ComputerName  -Credential 

4. PowerShell远程命令的基本使用见官方文档: Running Remote Commands

  • Start an Interactive Session (Enter-PSSession and Exit-PSSession)
  • Run a Remote Command / Script (Invoke-Command)
  • Establish a Persistent Connection (New-PSSession)

 

使用PowerShellHttp方式连接Azure虚拟机

1. 同以上常规连接远程主机设置

1. 若虚拟机安全受网络完全组(Network Security Group)管控,设置允许5985入栈

2. 若虚拟机绑定了负载均衡器(load balancer),为5985端口设置入站NAT规则(Inbound NAT Rules), 或者为了隐藏实际端口,为5985端口运行状况探测(probes)和负载均衡规则(load Balancing Rules)

 

 使用PowerShell以Https方式连接Azure虚拟机

1. 同以上常规连接远程主机设置

2. 打开Azure远程虚拟机(Windows)防火墙设置,设置允许5986入栈

3. 若虚拟机安全受网络完全组(Network Security Group)管控,设置允许5986入栈

4. 若虚拟机绑定了负载均衡器(load balancer),为5986端口设置入站NAT规则(Inbound NAT Rules),或者为了隐藏实际端口,为5986端口运行状况探测(probes)和负载均衡规则(load Balancing Rules)

5. 需使用以下命令连接远程主机, 详细参数设置见: Enter-PSSession

# 设置会话,忽略远程机器的SSL证书验证
$SessionOption = New-PsSessionOption SkipCACheck -SkipCNCheck
Enter-PSSession -ConnectionUri https://:5986 -Credential  -SessionOption $SessionOption
# 另一种参数形式
Enter-PSSession -ComputerName  -Port 5986 -UseSSL -Credential  -SessionOption $SessionOption

 

从PowerShell 6开始,除了WS-MAN之外,远程处理技术还可以基于SSH协议。在最新的Windows 10和Windows Server 2019中,可以使用OpenSSH连接远程机器,详细文档参见:PowerShell remoting over SSH and OpenSSH in Windows, 另外,OpenSSH客户端在最新的Windows 10和Windows Server 2019中已默认安装,在 设置\应用\可选功能 列表下可以找到(见下图), 可以通过上方的添加功能按钮安装OpenSSH服务器。

 PowerShell 远程执行命令_第5张图片

 

更多参考:

1. Enable PowerShell remoting on Azure RM virtual machines

2. Copy files to Azure VM using PowerShell Remoting

3. Secrets of PowerShell Remoting

3. 远程管理WinRM,Enter-PSSession (Enable-PSRemoting = Set-WSManQuickConfig = winrm quickconfig)

4. PowerShell 远程执行任务

5. Windows开启WinRM服务 

标签: PowerShell

你可能感兴趣的:(系统维护(Windows,&,Linux),配置笔记)