Powershell invoke-command vs -computerName 效率比较
豆子一直以来都有一个认识误区,一直认为powershell远程操作的时候,如果某个命令自带了-computername的参数,那么就用他好了,这个自带的肯定效率比 我用invoke-command远程调用强。今天无意翻了翻课本,才发现这个认识是错误的!我居然带着这种错误的认识写了1年的脚本~
豆子实际验证了一下,比如我查询5个计算机最新的200条日志记录,下面两条语句都能获得类似的结果。
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倍多的区别
为什么会这样呢?
简单的说下区别,如果使用自带的-computerName,所有的命令都是按照计算机的顺序依次执行,类似foreach的效果,而invoke-command可以同时默认操作32台计算机;
第二个重要的区别是前者没有使用winrm服务,而是使用.net的某协议,而这些协议有可能被防火墙所屏蔽。
第三个重要区别是前者不会显示pscomputername 的属性,所有的结果出来你很难区分是从哪里来的;而后者可以轻松区别数据来自哪台计算机;
第四点,如果我在管道后面通过where-object进行过滤,前者会把所有结果一股脑传回本机,然后过滤;而后者可以在scriptblock里面进行过滤之后再传回结果。这个很类似-filter 和 where-object的区别了。
综上所述,一般情况下,使用invoke-commnad效率要高多了。
- getChildByName()与getChildAt()效率比较
- getChildByName()与getChildAt()效率比较
- AJAX vs FLEX:执行,传送,解析JSON,HTML,XML,AFM格式效率比较.
- 微软vs stl中vector和list的效率比较
- Hibernate VS MyBatis 区别 Hibernate3和MyBatis(iBatis)的执行效率比较
- Entity Framwork Vs ADO .Net Vs Dapper .Net 效率比较
- 微软vs stl中vector和list的效率比较
- Hibernate VS MyBatis 区别 Hibernate3和MyBatis(iBatis)的执行效率比较
- Invoke-Command in PowerShell
- 浅谈---测试Native Windows Command与Native PowerShell Command的效率高低
- 浮点数操作效率比较(乘法 VS 比较大小)
- 浅谈---测试Native Windows Command与Native PowerShell Command哪个效率高
- && vs || 与 if vs elseif vs else 效率比较
- getChildAt与getChildByName效率比较
- Javascript拼接字符串的效率比较:String.replace VS Array.push
- 微软vs stl中vector和list的效率比较
- Use PowerShell Invoke-Command for Remoting
- PowerShell vs. PsExec for Remote Command Execution
- C#基础-058 List集合、HashSet集合、HashTable集合、StringBuilder与String运行效率比较
- PHP 函数 截取字符串效率的比较