部分读者反应太多知识要学了,学完一轮又一轮,笔者也不想单单为了制造学习而学习,所有Excel催化剂所发布的内容,都是笔者所亲自使用到的,当然很多领域也没有深挖到很底的程度。
众多工具、语言都是为了我们去服务的,Excel催化剂不提倡为了学习而学习,所以很有必要先评估一下每一样知识对自身工作及职业生涯上有何价值再认真地去投入一些时间去学习。
在PowerShell这样的小众语言中,本篇尝试给大家梳理一下,仅能站在笔者有限的知识视野范畴,如有补充欢迎留言。
PowerShell使用场景
虽然说PowerShell也是在dotNET体系内,凡是dotNET语言可以完成的,它也几乎可以同样完成,但完成的代价可能不一,有些部分可能没有使用其他语言如C#等语言来得方便好用。
同样地PowerShell作为一门定位于帮助运维人员实现日常工作自动化的脚本语言,很多方面有其独特的优势所在,虽然用其他语言、工具一样可以完成,但PowerShell完成得更漂亮,更方便快捷。
详细的PowerShell优势可以参考下文所述。
PowerShell为什么强大 – PowerShell 中文博客 https://www.pstips.net/why-is-powershell-powerful.html
在Windows系统运维人员中使用面广
《PowerShell实战指南》一书,是面向运维人员的角度而写,如果想更深入地去了解,不妨看看。
例如一个系统管理员,需要管理几百台电脑,对他们安装补丁、软件等操作,可以用PowerShell直接自动化脚本完成,它擅长远程访问控制其他电脑。
同样地,因为PowerShell是跨平台的语言工具,在MAC和Linux上也可以使用,具体能否在这些系统上做运维就不得而知了。
在熟悉DOS命令的群体中,使用PowerShell可以完美替代CMD命令行工具,并且功能更强大,而很多命令也可以复用,无需重新学习,如dir/cd/config等经典的命令。
对其他微软系产品的自动化管理
同样地笔者非运维人员,在这一块也没有太深入了解,据笔者所知,使用PowerShell可以管理微软系绝大部分的产品如Exchange、SharePoint、Sqlserver、OFFICE365,而笔者主要的使用场景,目前为止,只有Azure的资源的运维管理。
因为Azure是微软的未来,所以作为认真追随微软的人来说,没有理由会不跟上去先学习一下PowerShell,为了日后更好地运维Azure的资源。
Azure上使用PowerShell真实场景
分享一点点笔者真实的项目应用,使用PowerShell对Azure的Azure SQL和Azure AS的资源开关升降自动化。
因笔者使用了Azure SQL和Azure AS两项服务,用于PowerBI的项目中,通过资源的开关升降操作,可以为企业节省出不少的Azure消耗费用,非常有实际推广价格。
我们Azure SQL仅用于数据仓库存储数据的作用,更准确地说只是为了给Azure AS分析服务提供更新多维数据模型时的数据源作用,所以整个使用时段是非常短的。
我们只需在数据ETL的时候,将Azure SQL的定价层性能调高,让旧数据删除与新数据插入性能更高,再就是数据ETL结束后Azure AS分析服务需要读取Azure SQL数据源时,读取的性能更高。这两个环节需要使用,其他时候可以关闭(Azure SQL不能关闭,只能降低到最低一层,最低层非常廉价,98元一个月全开,相当于关闭差不多。)
同样地在Azure AS分析服务供用户查询报表时使用,提供底层的计算能力,也因为用户只会在上班时间才有必要开通此服务,在节假日和下班时间,可以关闭。在上班时间,可能一个星期也只有某一段时间段才会有大量的用户同时访问报表,其他时段使用的人很少,这样也给我们很大的优化空间,忙时将定价层性能调主,闲时调低。
最后我们开发一个手动接口,让手动临时需要更改资源的状态可以实现,综合上述所述的场景,最终用PowerShell来控制Azure的资源,也是非常容易的事情,只需简单了解下PowerShell的语法和照着官方示例小改一下即可完成。
PowerShell的使用方式
当写好了PowerShell脚本后,我们想执行它或使用任务调试的方式来完成固定周期的自动执行步骤,笔者暂时发现的方法用如下几种。
直接PowerShell ISE上执行
使用PowerShell ISE,打开保存的脚本文件,直接在上面执行即可。
使用CMD或PowerShell控制台执行
可以在控制台上引用文件路径,也可以执行PowerShell脚本。
此处需要在脚本文件前加个点号。
使用批处理的方式执行
可以用CMD执行,当然也可以将其封装成bat批处理任务,双击即可完成执行。
使用任务计划的方式定时执行
我们更想要的真正自动化执行是定时给我们去执行代码,用Windows的任务计划就可以非常简单地完成定时任务。
因为PowerShell.exe的所在文件夹已经有环境变量了,所以直接给出程序名就可以。当然全路径也是可以的。
添加参数的位置加上PowerShell脚本的路径即可,这里前面加了个运行策略参数,Bypass是什么警告都不通知,比较顺畅运行,也可以不加。
完整的参数是:-ExecutionPolicy Bypass E:est.ps1
使用Sqlserver代理作业去运行
这种方式也是笔者在项目实际中所使用的,代理的方式,更好用一些,可以同时执行多个步骤,例如执行完PowerShell脚本后,下一步再执行其他任务。
当然这里可以直接写脚本内容,引用脚本文件也可以,记得加个英文句号在前面。
其他语言调用
据笔者所知,在dotNET语言可以轻松调用PowerShell脚本,至于如何实现,笔者没有深入研究过,有兴趣的可以自行google一下。
在其他语言中调用PowerShell功能,也是非常有优势的,可以实现强强联合,也是像笔者这样的业余人员所钟爱的。
结语
此篇简单给大家分享了一些PowerShell的应用场景和其对应的实现方式,对于特定的场景来说,PowerShell还是非常有优势的,并且学习成本真心不高,非常值得推荐使用。
下一篇给大家介绍一点PowerShell的轮子世界,可以怎样复用现有轮子加快我们的功能实现,欢迎继续关注。
笔者未来聚焦在数据领域的分享,不限于Excel,会分享更多Sqlserver、dotNET、Azure、PowerBI等话题,升级数据分析的能力,欢迎继续关注。*