陈奇网络工作室

windowsServer远程命令执行(PowerShellWinRM)

网站建设服务器

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

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

第一,知识储备:

1.WinRM相关操作

打开WinRM服务:

enable-PS remoting-Force

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

禁用-PS remoting-Force

查看WinRM服务监控信息:

winrm枚举winrm/config/Listener

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

删除WinRM HTTP侦听:

winrm删除winrm/config/listener?地址=*传输=HTTP

重新建立HTTP侦听:

winrm创建winrm/config/listener?地址=*传输=HTTP

WinRM服务更改侦听端口:

set-item-force ws man:\ \ \ \ localhost \ \ \ \ listener \ \ \ \ listener * \ \ \ \ port 5985

查看WinRM配置:

winrm获取winrm/config

查看端口监视器状态:

netstat -nao | findstr 5985

2、PowerShell脚本保存凭证的方法

使用Get-Credential命令以交互方式输入凭据(用户名和密码)。您可以先将凭证保存在变量中,例如:

$ cred=get-credit

$cred的对象类型名是:system。management . automation . PS credential,其中Password和UserName是它的属性,因此您可以创建一个这种类型的新对象。这里需要注意的是,密码类型是SecureString,用户名类型是String,所以需要将明文密码转换成安全字符串,可以使用ConvertTo-SecureString命令。

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

$ account=管理员

$password=\\\'123456\\\ '

$ sec pwd=convert to-secure string $ password-asplaint ext-force

$cred=new-objectSystem。management . automation . PS credential-argument list $ account,$secpwd

3、调用命令

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

-港口int

为此命令指定远程计算机上的网络端口。当WinRM的默认侦听端口更改时,指定一个新端口。

-计算机名称字符串[]

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

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

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

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

-会话PSSession[]

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

通过创建PSSession,Windows PowerShell可以与远程计算机建立永久连接。

-凭据PS凭据

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

-command/-ScriptBlock脚本Block

指定要运行的命令。用大括号({})将命令括起来,形成一个脚本块。

-文件路径字符串

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

-工作

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

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

-节流限制int

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

4、压力

PSSession是一个Windows PowerShell会话。当您需要与远程计算机持续连接时,请使用PSSession。PSSession相关命令:

回车-PSSession

与远程计算机开始交互式会话。

新一轮

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

获得-压力

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

移除-PSSession

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

5.将计算机名添加到TrustedHosts列表中。

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

set-item ws man:localhost \ \ \ \ client \ \ \ \ trusted hosts-Force-value *

您还可以使用通配符(*)将特定域中的所有计算机添加到可信主机列表中。

例如,以下命令将Fabrikam域中的所有计算机添加到可信主机列表中。

set-item ws man:localhost \ \ \ \ client \ \ \ \ trusted hosts * . fabrikam . com

要将特定计算机的IP地址添加到可信主机列表中,请使用以下命令格式(IP支持通配符*):

set-item ws man:\ \ \ \ localhost \ \ \ \ Client \ \ \ \ trusted hosts-value IP Address[,IP Address]

要查看受信任主机的列表,请使用以下命令:

get-item ws man:\ \ \ \ localhost \ \ \ \ Client \ \ \ \ trusted hosts

二、远程操作的常见场景

场景1:远程交互会话

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

场景1的示例:

#用户输入凭证(用户名和密码)

$ cred=get-credit

#建立远程互动会话

输入-PS session-计算机名192 . 168 . 21 . 1-凭据$cred

场景2:脚本块和脚本文件的一次性执行

这种情况是在本地计算机和远程计算机之间建立临时会话。将脚本块或脚本文件的内容发送到远程计算机执行,并将结果发送回本地计算机。这种方法非常高效,PowerShell推荐使用这种方法来执行远程命令。除非需要在会话中共享数据,否则建议使用这种方法。

场景2示例,

#用户输入凭证(用户名和密码)

$ cred=get-credit

#远程执行命令

invoke-command-computer name 192 . 168 . 21 . 1-Credential $ cred-command { dirC:/}

invoke-command-computer name 192 . 168 . 21 . 1-Credential $ cred-script block { dirc:\ \ \ \ }

#远程脚本执行

echodirc:\\\\dirDriveC.ps1

调用-命令-计算机名192 . 168 . 21 . 1-凭据$ cred-文件路径。\\\\dirDriveC.ps1

场景2示例(多个远程主机),

#用户输入凭证(用户名和密码)

$ cred=get-credit

#在多个远程主机上批量执行命令

invoke-command-computer name 192 . 168 . 21 . 1,192.168.21.4,192 . 168 . 21 . 7-Credential $ cred-script block { dirc:\ \ \ \ }

#将并发连接数设置为1。

invoke-command-computer name 192 . 168 . 21 . 1,192.168.21.4,192 . 168 . 21 . 7-Credential $ cred-throttle limit 1-script block { dirc:\ \ \ \ }

场景3:脚本块和脚本文件在命名会话中执行。

1.定义会话:请使用new-pssession命令定义会话,例如$ session 1=new-PS session-computer name server 1。(如有必要,请使用Credential参数。)

2.会话中脚本(或脚本文件)的远程执行:请使用Invoke-Command命令执行远程脚本,如Invoke-Command-session $ session 1-script block { dir c:\ \ }或Invoke-Command-session $ session 1-file path。\ \ \ dir驱动器c.ps1。

3.获取结果:可以将执行结果赋给变量,比如$ sub=invoke-command-session $ session 1-script block { dir c:\ \ \ }或者$ sub=invoke-command-session $ session 1-file path。\ \ \ dir驱动器c.ps1。

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

场景三例子、

#用户输入凭据(用户名密码)

$ cred=获得信用

#创建PSSession,并赋值给变量

$ session 1=new-PS session-计算机名192 .168 .21 .1-凭据美元信用

#远程执行命令(持续性)

invoke-Command-Session $ Session 1-脚本块{ $ a=hello world }

invoke-Command-Session $ Session 1-脚本块{ $ a }

场景三例子(多个远程主机)、

#用户输入凭据(用户名密码)

$ cred=获得信用

#对多个远程主机创建PSSession,并赋值给变量

$ session _ many=new-PS session-计算机名192。168 .21 .1,192.168.21.4,192 .168 .21 .7-凭据美元信用

#对多个远程主机批量执行命令

invoke-Command-Session $ Session _ many-throttle limit 1-脚本块{ dirc:\ \ \ \ }

场景三例子(脚本方式)、

$ account=管理员

$password=\\\'123456\\\ '

#把密码转换为安全措施

$ sec pwd=convert to-secure string $ password-as plaint ext-force

#新建附言(同postscript);警官(police sergeant)凭据对象

$cred=new-objectSystem .管理。自动化。PS凭据-参数列表$ account,$secpwd

#远程主机列表赋值给变量

[string[]$计算机名=192。168 .21 .1,192.168.21.4,192.168.21.7

#创建压力

$ session _ many=new-PS session-计算机名$计算机名-凭据$ cred

#批量远程执行命令

invoke-Command-Session $ Session _ many-throttle limit 1-脚本块{ dirc:\ \ \ \ }

参考资料:

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。超文本标记语言

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理商官网:www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3