PowerShell远程管理

参考文章见此

基础

PowerShell的远程处理类似于Telnet和SSH(Secure shell)。工作模式:本地机器输入命令,命令在远程机器执行,结果显示在本地机器上。
MS(微软)定义了一个针对管理的web服务(Web Service for
Management,WS-MAN)协议专门用于计算机远程设备交换管理数据。

该协议完全基于HTTP/HTTPS工作,保证需要时可以轻易穿过防火墙。

在windows平台上,MS 通过 Windows 远程管理服务(Windows Remote Management service,简称 WinRM) 实现了 WS-Management 协议。这就是我们可以通过 PowerShell 执行远程操作的基础,因为 PowerShell 就是通过 WinRM 服务来进行远程操作的。
但不止只有PowerShell使用WinRM服务,还有很多程序使用该服务。因此需要在WinRM中将PowerShell注册为一个端点,用以区分。

实现远程处理的前提

  • 本地计算机和远程计算机至少需要第二部或者更新版的PowerShell(系统不必Windows XP还老)
  • 本地计算机和远程计算机需在同一域或者可信域中。否则配置很麻烦。

流程

  1. 以管理员身份运行powershell
    在搜索栏搜到windows powershell,右击run as administrator,打开windows powershell。

查看WinRM服务的状态

Get-Service WinRM  #查看WinRM服务状态
  1. 配置系统接收远程命令
    只需要在接受远程命令的主机上配置 WinRM 服务。用管理员权限启动PowerShell,执行以下命令:
Enable-PSRemoting -Force#启动WinRM服务,还帮我们设置好了防火墙规则

Test-WsMan ip_addr#ip_addr是远程主机ip,可以命令行输入ipconfig获取。此处是测试远程主机是否开启了远程操作服务。

出现以下结果,表明远程主机已配置好允许远程访问的服务。
在这里插入图片描述

  1. Invoke-Command可将一台本地机器的命令传递给多台远程主机,去执行,结果再返回本地机器。(本文是1:1模式)
```bash
Invoke-Command -ComputerName server01,server02 -Command {Get-Service mssqlserver}#server01,server02是远程机器名,可以1到多个。{}内部是需执行的命令。如本处命令用来查询服务的状态。
Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01 #在机器名为Sercer01上运行脚本test.ps1。注意:此脚本存放在本地机器,运行在远程机器,结果显示在本地机器。
Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock { Get-Culture }#-ComputerName指明远程机器名,-Credential中Domain01指明域是为了安全性。user01是一个由权限运行这些命令的用户。-ScriptBlock是要运行的脚本块。

如下是再本地机器运行以下命令查看sql server服务的状态。
在这里插入图片描述

服务的相关操作

服务的状态查看:Get-Service serverName #serverName是服务名
服务关闭:Stop-Service serverName 
服务启动:Start-Service serverName

用上述Invoke-Command命令的第一种格式写简单的脚本():

Invoke-Command -ComputerName WIN-NKOL5RNB1MQ -ScriptBlock { Get-Service WinRM } -credential Username
Invoke-Command -ComputerName WIN-NKOL5RNB1MQ -ScriptBlock { Get-Service mssqlserver } -credential Username
Invoke-Command -ComputerName WIN-NKOL5RNB1MQ -ScriptBlock { Stop-Service mssqlserver } -credential Username
Invoke-Command -ComputerName WIN-NKOL5RNB1MQ -ScriptBlock { Get-Service mssqlserver } -credential Username
Invoke-Command -ComputerName WIN-NKOL5RNB1MQ -ScriptBlock { Start-Service mssqlserver } -credential Username
Invoke-Command -ComputerName WIN-NKOL5RNB1MQ -ScriptBlock { Get-Service mssqlserver } -credential Username
其中:WIN-NKOL5RNB1MQ是远程机器名,Username是用户名。
注意:这个用户是远程机器的用户,它所在的机器和本地机器都已经加入同一个域,且Username是个域用户,加入了远程机器的administrators组(control pannel->user account->user account->change user account setting看查看)。

  1. 利用Invoke-Command执行脚本。
    执行以下命令,每执行一行命令,需要输入一次域用户名和密码。
 Invoke-Command -FilePath C:\Users\paulwang\Desktop\note\test1.ps1 -ComputerName WIN-NKOL5RNB1MQ#C:\Users\paulwang\Desktop\note是脚本在本地机器的存储位置。test1是上述脚本的保存名称。
  1. 错误解决
    执行以下命令
Invoke-Command -ComputerName server01,server02 -Command {Get-Service mssqlserver}

出错信息:
在这里插入图片描述
解决:多看错误提示吧!我是远程机器名输错了。
参考文章

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值