• 提高PowerShell脚本效率的五个常用方法


    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中正则表达式也具有高效的解析字符串的功能。请看如下例子:

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

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

    举一反三:

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

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

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

  • 相关阅读:
    java基础——DecimalFormat
    剑指——重建二叉树
    error error: illegal character: 'u3000'
    Android: Unhandled exception java.net.malformedurlexception 异常笔记
    Android获取系统时间
    java基础——hashCode笔记
    golang 红黑树
    golang 实现跳表skiplist
    快排
    堆排序
  • 原文地址:https://www.cnblogs.com/lavender000/p/7216477.html
Copyright © 2020-2023  润新知