Powershell invoke-command vs -computerName 效率比较

简介:

豆子一直以来都有一个认识误区,一直认为powershell远程操作的时候,如果某个命令自带了-computername的参数,那么就用他好了,这个自带的肯定效率比 我用invoke-command远程调用强。今天无意翻了翻课本,才发现这个认识是错误的!我居然带着这种错误的认识写了1年的脚本~j_0041.gif


豆子实际验证了一下,比如我查询5个计算机最新的200条日志记录,下面两条语句都能获得类似的结果。

1
2
3
Get-Eventlog  -ComputerName sydit01,sydav01,sydwsus,melfs01,melfs02 -LogName application -newest 200
  
invoke-command  -ComputerName sydit01,sydav01,sydwsus,melfs01,melfs02 -ScriptBlock{ get-eventlog  -LogName application -newest 200}


我可以用measure-command来估算一下执行时间,看看区别果然很明显。第一条命令使用自带的-computerName 花了35秒,第二条命令花了11秒,几乎是3倍多的区别


wKioL1bWdkiBGDSyAAAv7n0RubI560.png

wKioL1bWdlOwYUN_AAA3EncTsG8844.png


为什么会这样呢?

简单的说下区别,如果使用自带的-computerName,所有的命令都是按照计算机的顺序依次执行,类似foreach的效果,而invoke-command可以同时默认操作32台计算机;


第二个重要的区别是前者没有使用winrm服务,而是使用.net的某协议,而这些协议有可能被防火墙所屏蔽。


第三个重要区别是前者不会显示pscomputername 的属性,所有的结果出来你很难区分是从哪里来的;而后者可以轻松区别数据来自哪台计算机;


第四点,如果我在管道后面通过where-object进行过滤,前者会把所有结果一股脑传回本机,然后过滤;而后者可以在scriptblock里面进行过滤之后再传回结果。这个很类似-filter 和 where-object的区别了。


综上所述,一般情况下,使用invoke-commnad效率要高多了。










本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1746701,如需转载请自行联系原作者

目录
相关文章
|
Shell Linux C++
PowerShell VS Bash
 PowerShell VS Bash 说明下,现在windows 10上有PowerShell 和 Bash, Linux和Mac上也有bash和PowerShell 很多人说bash很好用啊,特别是sed/awk之类的程序,应该很少人用PowerShell吧? 但是微软又不傻,PowerShell肯定有它的强大之处。
1322 0
|
28天前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
24 0
|
2月前
|
Windows
Powershell 重新排列去重 Windows环境变量
【9月更文挑战第13天】本文介绍如何使用PowerShell对Windows环境变量进行重新排列和去重。首先通过`$env:`访问环境变量,接着使用`-split`命令分割路径,再利用`Select-Object -Unique`去除重复项。之后可根据需要对路径进行排序,最后将处理后的路径组合并更新环境变量。注意修改环境变量前应备份重要数据并了解潜在影响。
119 10
|
6月前
|
存储 Ubuntu Linux
windows可以安装Ubuntu,ubuntu上也可以安装Powershell
powerhsell除了可以在windows上使用外,还可以在Ubuntu上部署开发环境。下面介绍Ubuntu上安装powershell的方法。
197 0
|
Shell Linux 开发工具
windows中cmd和PowerShell批处理命令
之前在 Git 批量删除本地分支,有用到 Linux 或 MacOS 下的批处理命令,这个命令中的 grep、xargs 本身是 Shell script,在 windows 中的 cmd 和 PowerShell 中是不能用的
98 0
|
JavaScript Windows
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
|
Windows
使用PowerShell获取Windows当前锁屏壁纸
使用PowerShell获取Windows当前锁屏壁纸 如果原始图片丢了,用这段代码就可以提取当前锁屏壁纸了!
178 0
|
应用服务中间件 nginx Windows
Windows PowerShell 中启动 Nginx 报错解决方案
Windows PowerShell 中启动 Nginx 报错解决方案
Windows PowerShell 中启动 Nginx 报错解决方案
|
XML 监控 数据格式
利用powershell进行windows日志分析
0x00 前言   Windows 中提供了 2 个分析事件日志的 PowerShell cmdlet:一个是Get-WinEvent,超级强大,但使用起来比较麻烦;另一个是Get-EventLog,使得起来相当简单,可以实时筛选,接下来,我们利用PowerShell 来自动筛选 Windows 事件日志。
2523 0