PowerShell脚本运行慢怎么办?影响到正常企业流程正常运转怎么办?本文利用例子和数据给大家带来让PowerShell运行更快的五个常用方法。本人拙见,希望能够给大家带来一点启发~

1. 善用命令参数进行过滤

例子:

如果要查询事件ID为16的系统日志,一般人会这样写PowerShell脚本:

而大牛们会这样写代码:

哪一个运行更快呢?来看效率对比结果:

显然,第二种方法要快上数倍以上。第一种方法需要查询遍历整个事件日志后再在内存中过滤结果,而第二种方法直接使用命令自带的参数过滤结果后输出。

举一反三:

使用某一个PowerShell命令前,要多多查询命令帮助文档,如果有过滤类型的参数,强烈推荐使用它来代替常规管道符过滤方法。

刚开始看Help的时候可能会显得枯燥乏味,当你看懂后就会更好地提高脚本的效率,写出更棒的脚本。

2. 减少耗时语句的循环次数

例子:

如果要从数据库中获取Type为0并且大小大于100000的文档对象ID,有些人可能会这样写代码:

还有一些人会这样写代码:

哪一种运行更快呢?来看效率对比结果:

显然第二种要快上几倍。复杂的TSQL查询语句使得返回的对象要少一些,耗时长的语句循环次数减少很多。

举一反三:

尽量减少客户端与服务器端交流的次数,复杂而精确的查询语句可以使服务器返回尽量少的结果,该方法不止适用于数据库查询情况,也用于AD查询,Office 365查询等。

3. 尽量减少耗时命令的使用

例子:

如果要执行类似循环遍历给一个文件末尾添加内容的操作,有些人可能会使用一些已有的PowerShell操作API,比如Add-Content,Out-File -Append和Export-CSV Append等。如下:

对于很小的文件,这些方法比较适用,如果是数以万计的文件循环,则会大大的影响效率。

这里推荐使用.NET对象来代替已有PowerShell API,如下:

效率对比如下:

显然,第二种要比第一种方法快上数倍以上,原因是由于Add-Content操作,每一次调用都需要这几步骤——打开文件、滚到最后、添加内容、关闭文件,所以大量执行才会很慢。

举一反三:

PowerShell一些现成的API使用起来很方便,但是也有自己的弊端,建议使用之前一定要细读帮助文档,了解具体过程,才能最佳的使用。

4. 减少无用内存对象复制操作

在给一个数组添加对象的时候,有些人会像下面的方法写,以及效率对比如下:

可以看出,第二种方法效率高的不是一星半点,而且数组越大,差距越明显。

原因是:在第一种方法执行过程中,.Net会复制整个数组到内存中,添加对象并且删除原来的旧数组。既耗时又耗费空间。

5. 善用正则表达式

例子:

正则表达式是一个老生常谈的技术,我相信没有一个程序员不知道的。在PowerShell中正则表达式也具有高效的解析字符串的功能。请看如下例子:

我想把”TestDomain\TestUser”通过分析字符串的方法,取出Domain和User。

可以看到第二种正则表达式的方法是最高效的。

举一反三:

正则表达式是每一个程序员必备的知识,应用巨广泛。在PowerShell中检索字符串匹配还具有很高的效率,建议大家一定要吃透用透。

[原创文章,转载请注明出处,仅供学习研究之用,如有错误请留言,如觉得不错请推荐,谢谢支持]

[原文:http://www.cnblogs.com/lavender000/p/7216477.html ,来自永远薰薰]

提高PowerShell脚本效率的五个常用方法的更多相关文章

  1. 通过DNS通道传输的交互式PowerShell脚本

    摘自:http://www.freebuf.com/sectool/90616.html 欢迎来到一周PowerShell脚本的第五天,今天我们将讨论使用ICMP和DNS的交互式PowerShell脚 ...

  2. 提高SQL查询效率的常用方法

    提高SQL查询效率的常用方法 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driv ...

  3. 提高你开发效率的十五个Visual Studio 2010使用技巧

    提高你开发效率的十五个Visual Studio 2010使用技巧 相信做开发的没有不重视效率的.开发C#,VB的都知道,我们很依赖VS,或者说,我们很感谢VS.能够对一个IDE产生依赖,说明这个ID ...

  4. 提高php编程效率技巧

    提高php编程效率技巧 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-08-13   php是全球范围应用范围最广的开发语言,php和linux.apache.mysql紧密结合,形 ...

  5. iOS开发——实用篇&提高iOS开发效率的方法和工具

    提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...

  6. 使用PowerShell脚本部署定时器到MOSS2010

    转:http://www.77site.com/tech/1087042010072906074113_2012050808152911.html 第一章 前言 在此次练习中,您将了解到如何使用Pow ...

  7. 数据库管理——Powershell——使用Powershell脚本找出消耗最多磁盘空间的文件

    原文:数据库管理--Powershell--使用Powershell脚本找出消耗最多磁盘空间的文件 原文译自: http://www.mssqltips.com/sqlservertip/2774/p ...

  8. powershell脚本之windows服务与进程

    powershell脚本之windows服务与进程 服务与进程的区别: Windows服务是指系统自动完成的,不需要和用户交互的过程,可长时间运行的可执行应用程序 进程是程序运行的实例,系统会给运行中 ...

  9. 极大提高Web开发效率的8个工具和建议(含教程)

    面对复杂的 Web 应用的开发,良好的流程和工具支持是必不可少的,它们可以让日常的开发工作更加顺畅.更加高效.本文介绍了6个Web开发利器以及相关的教程,帮助你在开发.调试.集成和发布过程极大地提高效 ...

随机推荐

  1. 基于windowsphone7的控制ppt播放

    最近突然想起了一个学长的一个利用手机控制ppt播放的一个创意,并想将其在windows phone7上实现一下. 经过几天的努力已经可以控制ppt的播放,暂停,上一张,下一张了,并且电脑会将当前ppt ...

  2. JS计算两个日期之间的天数,时间差计算

    1.日期之间的天数计算 //计算天数差的函数,通用 function DateDiff(sDate1, sDate2) { //sDate1和sDate2是2017-9-25格式 var aDate, ...

  3. 2012r2 以及 2012r2 withupdate 已经安装更新的差异

    0. 2012r2 不管带不带 update 1 他的版本号 都是 6.3.9600 如图示 2012r2的发布时间是 2013年 2012r2withupdate的发布时间是 2014年. 查看补丁 ...

  4. 利用stream对map集合进行过滤

    最近公司在大张旗鼓的进行代码审核,从中也发现自己写代码的不好习惯.一次无意的点到了公司封装的对map集合过滤的方法,发现了stream.于是研究了一下.并对原有的代码再次结合Optional进行重构下 ...

  5. DB磁盘满导致Zabbix Server Crash一例

    故障描述 今天线上zabbix出现几次数据中断的情况,经排查为DB服务器磁盘空间不足导致的.还好我们目前我们zabbix,falcon两套监控系统并存,哈哈. 故障排查过程没什么技术含量,简单的将故障 ...

  6. widows终端远程连接Linux服务器

    一.前言 为什么不是远程连接Linux服务器? 因为我不会,远程连接window我就用电脑自带的“远程桌面连接”. 以下所述都是在CentOS操作系统下的. 服务器刚换成Linux的时候很迷茫,感觉无 ...

  7. Ubantu下配置Sublime Text3---python环境的搭建

    因为学习机器学习算法的原因,买的参考书籍很多都是python语言进行开发的,因此也想着在Linux系统下配置python的环境.Sublime是一款非常流行的编辑器,可以添加很多小巧有用的插件,同时也 ...

  8. Repeats SPOJ - REPEATS(重复次数最多的连续重复子串)

    论文题例8 https://blog.csdn.net/queuelovestack/article/details/53031731这个解释很好 其实,当枚举的重复子串长度为i时,我们在枚举r[i* ...

  9. 搭建ELK收集Nginx日志

    众所周知,ELK是日志收集套装,这里就不多做介绍了. 画了一个粗略的架构图,如下: 这里实际用了三个节点,系统版本为CentOS6.6,ES版本为2.3.5,logstash版本为2.4.0,kiba ...

  10. Java的容器类

    程序总是根据运行时才知道的某些条件去创建新对象.需要在任意时刻和任意位置创建任意数量的对象. 如果你想保存一组基本数据类型数据,建议使用数组,但是数组有固定的尺寸. 一般情况下,你在写程序时并不知道将 ...