开启并配置WinRM

被远程机器执行

前提:被远程的机器上开启可WinRM

如果连接失败;则需要在被远程的机器上运行:

Enable-PSRemoting -SkipNetworkProfileCheck -Force

【Powershell】Powershell在远程计算机上执行指令_远程

验证方法:

  • WinRM处于Running状态
  • 防火墙rule处于Allow状态

【Powershell】Powershell在远程计算机上执行指令_执行_02

远程机器执行

如果远程的计算机没有加入域(这里注意是执行远程指令的机器而不是被远程的机器);则需要为其设定:

#设定
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.11.199" -Force

#查看设定结果
Get-Item WSMan:\localhost\Client\TrustedHosts

再说一遍:这条指令在执行远程指令的机器上执行。

命令中的"192.168.11.199"是被远程的机器

在远程机器上测试是否可以正常连接到被远程机器

PS C:\Users\Administrator> Test-WSMan "192.168.11.199"


wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 0.0.0 SP: 0.0 Stack: 3.0



PS C:\Users\Administrator>

【Powershell】Powershell在远程计算机上执行指令_指令_03

更详细的内容,看我另一篇文章:https://blog.51cto.com/mlxia/5682985


使用Invoke-command

在本机执行下面的命令;

#本机
PS C:\Users\Administrator> hostname
PCA001
PS C:\Users\Administrator>
#远程计算机的访问凭证
PS C:\Users\Administrator> $credential = Get-Credential

位于命令管道位置 1 的 cmdlet Get-Credential
请为以下参数提供值:
Credential
PS C:\Users\Administrator> 

#在远程计算机中执行指令
PS C:\Users\Administrator> Invoke-Command -ComputerName 192.168.11.199 -ScriptBlock {hostname} -Credential $credential
DESKTOP001
PS C:\Users\Administrator> Invoke-Command -ComputerName 192.168.11.199 -ScriptBlock {ipconfig} -Credential $credential

Windows IP 配置


以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::4ad6:7f6c:bde8:956d%18
   IPv4 地址 . . . . . . . . . . . . : 192.168.11.199
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.11.1

以太网适配器 以太网 2:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 以太网 3:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 VMware Network Adapter VMnet1:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::9505:3329:f98b:d4b%17
   IPv4 地址 . . . . . . . . . . . . : 192.168.183.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::d4f9:e8fa:bb89:87c9%7
   IPv4 地址 . . . . . . . . . . . . : 192.168.106.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :
PS C:\Users\Administrator>

以脚本的方式执行Invoke-command

脚本内容:

$UserName = "administrator"
$Password = "xxxxxxxx"
$serverip = "192.168.11.199"
$secPassword = ConvertTo-SecureString $Password -AsPlainText –Force
$cred = New-Object System.Management.Automation.PSCredential($UserName,$secPassword)
$result = invoke-command -ComputerName $serverip -Credential $cred -ScriptBlock {
hostname
gwmi win32_operatingsystem
}

$result
$result[0]

也可以将指令参数化

$UserName = "administrator"
$Password = "xxxxxxxx"
$serverip = "192.168.11.199"
$secPassword = ConvertTo-SecureString $Password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($UserName,$secPassword)

$a= "win32_operatingsystem"
$b = "balabala.."
$result = invoke-command -ComputerName $serverip -Credential $cred -ScriptBlock {
param($item1, $item2)  #使用参数则必需要有这句
hostname
gwmi $item1
} -ArgumentList $a,$b

$result
$result[0]

好了,就简单说这些吧;以上内容,结合工作实际环境,应该可以发生很多奇妙的反应。