Windows 远程管理 (WinRM) 是 WS-Management 协议的 Microsoft 实现。该协议是基于简单对象访问协议 (SOAP) 的、防火墙友好的标准协议,使来自不同供应商的硬件和操作系统能够互操作。WS-Management 协议由硬件和软件制造商群体开发,作为一种公共标准,可用于与实现该协议的任何计算机设备远程交换管理数据。WinRM自动安装在所有当前支持的Windows操作系统版本中。
使用PowerShell对服务器远程管理,要在远程服务器上启用WinRM。
WinRM常用命令
winrm e winrm/config/listener
winrm get winrm/config
winrm quickconfig
命令将会执行这些操作
如果WinRM服务已经在服务器上启动,则会出现以下内容
更多WinRM服务命令可查看官网
Installation and configuration for Windows Remote Management
使用Get-Credential
命令来交互式输入凭据(用户名+密码),可以先将凭据保存到一个变量中,如:
$cred = get-credential
Invoke-Command
在本地和远程计算机上运行命令,并从命令返回所有输出,包括错误。
-ComputerName[]>
若要在远程计算机上运行单个命令,请使用“ComputerName
”参数。该参数指定运行该命令的计算机,默认是本地计算机。当您使用ComputerName参数时,PowerShell将创建一个仅用于运行指定命令的临时连接,然后关闭该连接。
要在“ComputerName
”的值中使用IP地址,命令必须包含“Credential
”参数。计算机必须配置为HTTPS传输,或者必须在本地计算机上的 WinRM TrustedHosts 列表中包含远程计算机的 IP 地址。
-Port
指定远程计算机上用于此命令的网络端口。用于WinRM默认监听端口被更改的情况下,指定新的端口。
-Session []>
在指定的 Windows PowerShell 会话 (PSSession) 中运行此命令。
通过创建 PSSession,Windows PowerShell 可以建立与远程计算机的持续性连接。
-Credential
指定有权执行此操作的用户帐户。默认值为当前用户。
-command/-ScriptBlock
指定要运行的命令。用大括号 ({ }) 括起命令以形成脚本块。
-FilePath
在一台或多台远程计算机上运行指定的本地脚本。
-AsJob
在远程计算机上将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。
使用 AsJob 时,此命令返回代表作业的对象,然后显示命令提示符。要管理作业,请使用 Job cmdlet。要获取作业结果,请使用 Receive-Job。
-ThrottleLimit
指定为运行此命令可建立的并发连接的最大数目。如果省略此参数或输入 0 值,则使用默认值 32。
PSSession即Windows PowerShell会话。当你需要与远程计算机的持续连接时,则使用PSSession。PSSession相关命令:
Enter-PSSession
启动与远程计算机间的交互式会话。
New-PSSession
创建PSSession,并返回一个表示PSSession的对象。你可以将对象保存在变量中。要运行一系列共享数据的相关命令,请使用New-PSSession
cmdlet在远程计算机上创建一个PSSession ,然后使用Invoke-Command
的Session参数在PSSession
中运行该命令。
Get-PSSession
获取当前会话中创建的PSSession。Get-PSSession返回与New-PSSession返回的对象相同类型的对象。
Remove-PSSession
删除 PSSession 并释放其正在使用的资源。
若要将所有计算机添加到受信任主机列表,请使用以下命令 :
set-item wsman:localhost\client\trustedhosts -Force -value *
还可以使用通配符 (*) 将特定域中的所有计算机添加到受信任主机列表。
例如,以下命令将Fabrikam域中的所有计算机添加到受信任主机列表。
set-item wsman:localhost\client\trustedhosts *.fabrikam.com
若要将特定计算机的 IP 地址添加到受信任主机列表,请使用以下命令格式(IP支持通配符*):
set-item wsman:\localhost\Client\TrustedHosts -value "[,]"
若要查看受信任主机列表,请使用以下命令:
get-item wsman:\localhost\Client\TrustedHosts
通过脚本块、脚本文件的一次性执行来处理信息:这种场景,是在本地计算机与远程计算机上建立一个临时会话。将脚本块或者脚本文件的内容发送到远程计算机执行,并将结果发回本地计算机。
这种方法执行效率很高,是PowerShell推荐的执行远程命令的方法。除非需要在会话中共享数据,否则建议使用该方法。
# 用户输入凭据(用户名+密码)
$cred=get-Credential
# 远程执行命令
invoke-command -computername 192.168.2.52 -Credential $cred -command {Get-WmiObject -Class Win32_LogicalDisk}
invoke-command -computername 192.168.2.52 -Credential $cred -ScriptBlock {Get-WmiObject -Class Win32_LogicalDisk}
# 远程执行脚本 test.ps1
invoke-command -computername 192.168.2.52 -Credential $cred -FilePath .\test.ps1
参考文献