PowerShell远程处理

Windows通过Windows远程管理组件(WinRM)实现针对管理的Web服务(Web Services for Management,WS-MAN),其完全基于HTTP或HTTPS进行工作,可以保证在需要情况下,轻易透过防火墙进行作业;

除了基于WS-MAN外,还可以基于SSH协议。

当运行一个远程命令时,PowerShell将输出结果放入XML文件包中,之后通过HTTP或HTTPS协议传回到本地计算机,到达本地计算机后,该XML会反序列化为PowerShell可以处理的对象。

序列化和反序列化只是一种格式转换的形式,从对象转化为XML称为序列化,从XML转化为对象则为反序列化。

需要本地计算机和远程计算机至少为V2版本,处在同一域或可信域中。若不在域中,远程处理也可正常工作,但配置有些麻烦,可参考 Help About_Remote_Troublebleshooting

WinRM-Windows Remote Management

Powershell远程管理所基于的服务,目前越来越多的管理程序开始使用WinRM服务,甚至包含了已使用其他协议的程序;

因此,微软闹正WinRM可以将流量导入到多种管理程序,WinRM类似于一个调度器:当有新的流量进来后,WinRM会决定由哪种程序来处理这部分流量。所以WinRM流量都标记了接收应用程序的名称,同时这些应用程序都必须在WinRM中创建各自的端点,这样WinRM才能侦听这些主体的流量。

所以在系统中可以有几十个甚至上百个WinRM端点,PowerShell称它们为会话配置选项,每一个端点都指向一种应用程序,甚至可以将多个端点指向同一个应用程序,但时每个端点提供不同的权限以及功能。

由Enable-PSRemoting创建的默认侦听器会侦听本地所有IP地址的某个端口,但是一个侦听器仅会侦听从特定IP地址的特定端口发出的请求。

Enable-PSRemoting会启用WinRM服务,配置该服务为自动启动模式,然后在WinRM中为PowerShell注册一个端口,会在防火墙中针对传入的WinRM流量创建例外条件。

有人会用到Set-WSMANQuickConfig命令,但根本没必要,Enable-PSRemoting会调用该命令的。

若运行时报错一般是没有管理员权限运行或者网络是公用网络,无法设置防火墙例外。

WinRM更改端口号或配置HTTPS,如下:

WinRM Set WinRM/Config/Listener?Address=*+Transport=HTTPS @{Port="1234"}

 

一对一远程连接:

重点来了,开启WinRM(Enable-PSRemoting),V2版本,在同一域或可信域中,如果不是管理员权限运行的PowerShell,可使用-Credential参数指定另一个拥有管理员权限的账号。

 Enter-PSSession -ComputerName pc20180526

该计算机名称不接受IP地址或者DNS中的别名,

连接后即可像在远程计算机上运行命令一样了。

使用Exit-PSSession退出当前连接。

Exit-PSSession

 

一对多远程连接:

 

将一个命令同时传递给多台远程计算机,可称为是全面的分布式计算。每台计算机都独立运行发送的命令,然后将结果集反回给你。PowerShell使用Invoke-Command命令来实现该一对多的远程处理。

PS C:\Users\Administrator> Invoke-Command -Command { dir } `
>> -ComputerName ( `
>> Get-ADComputer -Filter * -SearchBase "OU=Sales,DC=Company,DC=Pri" |
>> Select-Object -Expand Name )

该分布式命令默认设置是最多同时传递到32台计算机运行命令,超过32台,会将计算机信息存到一个队列中,一台计算机上运行完毕,队列的下一台计算机会立即开始运行。-ThrottleLimit参数来指定更多数量的计算机,若网络情况好,且计算机够强劲的话,可以修改该参数。

 

Get-EventLog命令的-ComputerName参数也可以指定远程计算机执行命令,但是有几个区别是:

1.提及的远程计算机是串行访问,而不是并行,导致命令运行时间较长;

2.输出结果不会包含PSComputerName属性,导致很难判断结果来自哪台计算机;

3.该连接不使用WinRM实现,而是使用.Net FrameWork决定的底层协议;

4.得到的对象是全面的完整的对象,Invoke-Command拿到的结果是反馈的序列化对象,是一个快照形式的;

5.得到的是从计算机列表中拿到的日志对象,而不是经远程计算机处理和筛选后的日志;

 

这种一对一,一对多的连接都是即席连接,每次运行一条命令后就断开连接了。会话选项是指可以改变建立会话方式的一组选项,可使用New-PSSessionOption命令实现该功能。比如忽略机器名称检查,然后打开一个会话:

PS C:\Users\Administrator> Enter-PSSession -ComputerName server01 `
>> -SessionOption (New-PSSessionOption -SkipCNCheck)

查看New-PSSessionOption命令的帮助信息,学习命令可实现的强大功能。

 

有一点是,在组策略对象(GPO)中的配置选项会覆盖本地配置的选项。不要想当然以为没有GPO影响到你的设置,需要去检查确认。即是否开启了WinRM,Windows Remote shell需要确认。

有些公司默认开启了远程桌面协议(RDP),PowerShell的远程处理和RDP没多大区别,并且相对于RDP,PowerShell的远程连接开销更小。由于远程连接可以被审核到(类似于网络账号访问一个共享文件会在审计日志中出现对应日志),默认情况下一般被限制为仅管理员可以连接。

 

----the End----

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值