千家信息网

windows服务器远程执行命令(PowerShell+WinRM)

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Windows 远程管理 (WinRM) 是 WS-Management 协议的 Microsoft 实现。该协议是基于简单对象访问协议 (SOAP) 的、防火墙友好的标准协议,使来自不同供应商的硬件
千家信息网最后更新 2026年11月03日windows服务器远程执行命令(PowerShell+WinRM)

Windows 远程管理 (WinRM) 是 WS-Management 协议的 Microsoft 实现。该协议是基于简单对象访问协议 (SOAP) 的、防火墙友好的标准协议,使来自不同供应商的硬件和操作系统能够互操作。WS-Management 协议由硬件和软件制造商群体开发,作为一种公共标准,可用于与实现该协议的任何计算机设备远程交换管理数据。

使用PowerShell对服务器远程管理,要在远程服务器上启用WinRM。

一、知识储备:

1、WinRM相关操作

开启WinRM服务:

Enable-PSRemoting -Force

阻止本地计算机接收远程命令(不会停止WinRM服务):

Disable-psremoting -Force

查看WinRM服务监听信息:

winrm enumerate winrm/config/Listener

WinRM2.0默认端口5985(HTTP端口)或5986(HTTPS端口)。

删除WinRM HTTP侦听:

winrm delete winrm/config/listener?Address=*+Transport=HTTP

重新建立HTTP侦听:

winrm create winrm/config/listener?Address=*+Transport=HTTP

WinRM服务更改监听端口:

set-item -force wsman:\localhost\listener\listener*\port 5985

查看WinRM的配置:

winrm get winrm/config

查看端口监听状态:

netstat -nao | findstr "5985"

2、PowerShell脚本保存凭据方法

使用Get-Credential命令来交互式输入凭据(用户名+密码),可以先将凭据保存到一个变量中,如:

$cred = get-credential

$cred的对象类型名称为:System.Management.Automation.PSCredential,其中的Password和UserName都是其属性,所以可以新建一个该类型的对象。在此处需要注意的是Password类型为SecureString,UserName类型为String,所以需要将明文的Password转换为安全字符串,可以使用ConvertTo-SecureString命令。

非交互式保存凭据代码示例:

$account = "administrator"  $password = '123456'  $secpwd = convertto-securestring $password -asplaintext -force  $cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd

3、Invoke-Command

Invoke-Command在本地和远程计算机上运行命令,并从命令返回所有输出,包括错误。使用一个Invoke-Command命令,可以在多台计算机上运行命令。部分参数介绍:

-Port

指定远程计算机上用于此命令的网络端口。用于WinRM默认监听端口被更改的情况下,指定新的端口。

-ComputerName

指定运行此命令的计算机。默认值为本地计算机。

使用 ComputerName 参数时,Windows PowerShell 会创建一个临时连接,此连接仅用于运行指定的命令,之后将关闭。如果需要持续性连接,请使用 Session 参数。

在一个逗号分隔列表中键入一台或多台计算机的 NETBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机,请键入计算机名称、"localhost"或句点 (.)。

若要在 ComputerName 参数的值中使用 IP 地址,命令必须包括 Credential 参数。另外,必须为计算机配置 HTTPS 传输,或者必须在本地计算机上的 WinRM TrustedHosts 列表中包含远程计算机的 IP 地址。

-Session

在指定的 Windows PowerShell 会话 (PSSession) 中运行此命令。

通过创建 PSSession,Windows PowerShell 可以建立与远程计算机的持续性连接。

-Credential

指定有权执行此操作的用户帐户。默认值为当前用户。

-command/-ScriptBlock

指定要运行的命令。用大括号 ({ }) 括起命令以形成脚本块。

-FilePath

在一台或多台远程计算机上运行指定的本地脚本。

-AsJob

在远程计算机上将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。

使用 AsJob 时,此命令返回代表作业的对象,然后显示命令提示符。要管理作业,请使用 Job cmdlet。要获取作业结果,请使用 Receive-Job。

-ThrottleLimit

指定为运行此命令可建立的并发连接的最大数目。如果省略此参数或输入 0 值,则使用默认值 32。

4、PSSession

PSSession即Windows PowerShell会话。当你需要与远程计算机的持续连接时,则使用PSSession。PSSession相关命令:

Enter-PSSession

启动与远程计算机间的交互式会话。

New-PSSession

创建PSSession,并返回一个表示PSSession的对象。你可以将对象保存在变量中。

Get-PSSession

获取当前会话中创建的PSSession。Get-PSSession返回与New-PSSession返回的对象相同类型的对象。

Remove-PSSession

删除 PSSession 并释放其正在使用的资源。

5、将计算机名称添加到TrustedHosts列表

若要将所有计算机添加到受信任主机列表,请使用以下命令 :

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


二、远程操作常见场景

场景一:远程交互式会话

  这个场景一般用于手动进行远程操作,输入命令,查看结果。方法很简单。进入交互式会话的命令是Enter-PSSession,退出时键入Exit-PSSession或者exit都可以。远程交互式操作期间,输入的命令在远程计算机上运行,就像直接在远程计算机上输入并执行这些命令一样。期间所定义的变量和命令的执行结果在退出交互式会话之后不再可用。

场景一例子:# 用户输入凭据(用户名+密码)$cred=get-Credential# 建立远程交互式会话Enter-PSSession -computername 192.168.21.1 -Credential $cred



场景二:脚本块、脚本文件的一次性执行

  这种场景,是在本地计算机与远程计算机上建立一个临时会话。将脚本块或者脚本文件的内容发送到远程计算机执行,并将结果发回本地计算机。这种方法执行效率很高,是PowerShell推荐的执行远程命令的方法。除非需要在会话中共享数据,否则建议使用该方法。

场景二例子、# 用户输入凭据(用户名+密码)$cred=get-Credential# 远程执行命令invoke-command -computername 192.168.21.1 -Credential $cred -command {dir C:/}invoke-command -computername 192.168.21.1 -Credential $cred -ScriptBlock {dir c:\}# 远程执行脚本echo "dir c:\" > dirDriveC.ps1invoke-command -computername 192.168.21.1 -Credential $cred  -FilePath .\dirDriveC.ps1


场景二例子(多个远程主机)、# 用户输入凭据(用户名+密码)$cred=get-Credential# 对多个远程主机批量执行命令invoke-command -computername 192.168.21.1,192.168.21.4,192.168.21.7 -Credential $cred -ScriptBlock {dir c:\}# 设置并发连接数设置为1的情况invoke-command -computername 192.168.21.1,192.168.21.4,192.168.21.7 -Credential $cred -ThrottleLimit 1 -ScriptBlock {dir c:\}


场景三:脚本块、脚本文件在命名会话中执行

1、定义会话: 请使用new-pssession命令定义会话,如$session1 = new-pssession -computername server1。(如果必要请使用Credential参数。)

2、在会话中远程执行脚本(或者脚本文件): 请使用Invoke-Command命令执行远程脚本,如Invoke-Command -Session $session1 -ScriptBlock {dir c:\}或者Invoke-Command -Session $session1 -FilePath .\dirDriveC.ps1

3、获得结果: 可以将执行结果赋于变量,如$sub = Invoke-Command -Session $session1 -ScriptBlock {dir c:\}或者$sub = Invoke-Command -Session $session1 -FilePath .\dirDriveC.ps1

后续命令可参照步骤2或者3继续执行,所有执行的命令就好像在同一个上下文中执行一样。

场景三例子、# 用户输入凭据(用户名+密码)$cred=get-Credential# 创建PSSession,并赋值给变量$session1 = new-pssession -computername 192.168.21.1 -Credential $cred# 远程执行命令(持续性)Invoke-Command -Session $session1 -ScriptBlock {$a="hello world"}Invoke-Command -Session $session1 -ScriptBlock {$a}

场景三例子(多个远程主机)、# 用户输入凭据(用户名+密码)$cred=get-Credential# 对多个远程主机创建PSSession,并赋值给变量$session_many = new-pssession -computername 192.168.21.1,192.168.21.4,192.168.21.7 -Credential $cred# 对多个远程主机批量执行命令Invoke-Command -Session $session_many -ThrottleLimit 1 -ScriptBlock {dir c:\}
场景三例子(脚本方式)、$account = "administrator"$password = '123456'# 把密码转换为SecureString$secpwd = convertto-securestring $password -asplaintext -force# 新建PSCredential对象$cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd# 远程主机列表赋值给变量[string[]]$computername="192.168.21.1","192.168.21.4","192.168.21.7"# 创建PSSession$session_many = new-pssession -computername $computername -Credential $cred# 批量远程执行命令Invoke-Command -Session $session_many -ThrottleLimit 1 -ScriptBlock {dir c:\}


参考资料:

https://technet.microsoft.com/zh-cn/library/dd347578.aspx

https://technet.microsoft.com/zh-cn/library/hh847839.aspx

https://technet.microsoft.com/zh-cn/library/dd347642.aspx

http://www.cnblogs.com/ceachy/archive/2013/02/20/PowerShell_Remoting.html


命令 计算机 脚本 用户 场景 主机 运行 输入 凭据 对象 交互式 参数 端口 变量 密码 服务 例子 用户名 结果 多个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 蓝思科技飞鸽互联网 互联网科技金融 互联网的科技创新 华中科技大学互联网 碳银互联网科技有限公司 互联网 视角下的科技创新 科技类的互联网平台 中正互联网科技招聘 衡水科技产业互联网平台 花神(南京)互联网科技有限公司 互联网科技大奖都有哪些公司 电子科技大学互联网创业大赛 银川新华互联网科技学校联系电话 国产互联网科技公司 美国五大互联网科技公司市值多少 互联网时代高科技布局 杭州融税互联网科技有限公司 河南商务圈互联网科技有限公司 六子台科技互联网展会 科技互联网项目 小马过河互联网科技 四川狮子座互联网科技 互联网金融科技委员会 互联网科技股午盘股票涨跌 卫星互联网科技股票 互联网科技寓意 内蒙古九一互联网科技 互联网相关科技技术 版纳互联网科技选哪家
0