经过上篇的简单示例,给大家领略了PowerShell的威力,做同样的事情,比起其他语言来,更容易实现,几乎就是需要做什么就一个命令完成。 但通常一些复杂的操作,在原生的功能上没提供,此时就需要到社区里找现成的轮子来用,本篇给大家送上几个新发现的不错的轮子,让我们的工作更加轻松,自在。
听多了python的好,经PowerShell一比就不算什么
相信在数据圈子里,或多或少都听到过python的一些宣传,同一个功能C写100行代码,python10行代码搞定。
这次好了,在PowerShell里,只需1行代码就完事,谁优谁劣,有对比就有结果。在PowerShell的轮子世界里,也是同样地追求这种1行代码解决问题的快感。
PowerShell轮子在哪里?
和dotNET的轮子库nuget一样,PowerShell一样有一个官方的轮子库powershellgallery。火热程度不及nuget,但其实从广义来说,nuget的轮子,都可以用到PowerShell上来,因为都是同样的dotNET库,PowerShell支持使用dotNET类库,只是有些麻烦,笔者也没兴趣太多研究,坐等powershellgallery慢慢繁荣起来即可。
如何安装PowerShell轮子
PowerShell的轮子叫模块,一句命令就可以安装了。按关键字找到自己需要安装的轮子,把名字记下来,就可以在PowerShell上输入Install-Module -Name 模块名进行安装。
当然,如果不想用浏览器,直接在PowerShell上用Find-Module一样可以查看到。不过信息量没有网页查看地详细。
安装过程中,可能有些小意外,不要慌,一般来说,用管理员权限打开PowerShell更为合理,如果自己写脚本给自己用的话。
查看轮子有哪些的功能
作为一个搞数据的人,哪里都离不开Excel,本篇也重点给大家介绍一个不错的Excel轮子,其底层也是用了dotNET的EPPLUS轮子作封装的,让PowerShell上与Excel交互更方便,并且性能得到保证,用的是openxml方式而不是依赖OFFICE环境的COM接口方式。
查看ImportExcel轮子有哪些功能,相对去网页上看,还不如直接在PowerShell的帮助上看,更方便,有时作者也只是维护了PowerShell里的帮助文档,反而在网页上没多少文档信息,这就是PowerShell奇特之处,用中学,自带帮助。
一般来说,只要我们导入过模块之后,右边的帮助系统里,就可以找到模块的帮助信息,如果没有,就重新用Import-Module导入一下。
随便找一句命令来试试手,Send-SQLDataToExcel,将数据库数据导出到Excel中来,数据库不限于Sqlserver,ACCESS、Excel也可以当数据库访问。
代码语言:javascript复制Send-SQLDataToExcel -MsSQLserver -Connection localhost -SQL "select name,type,type_desc from [master].[sys].[all_objects]" -Path F:自媒体相关其他文章分享powershell轮子temp.xlsx -WorkSheetname master -AutoSize -FreezeTopRow -AutoFilter -BoldTopRow
就一句命令,按照人想什么,它就帮我们做成了什么,只要按格式把一些要求的参数填上,参数填得越详细,出来的结果越符合自己的期望。
如示例中展示的-AutoSize -FreezeTopRow -AutoFilter -BoldTopRow,只要会英文单词,都可以知道里面是什么意思了。
比起等现成工具给我们做界面,开放各种参数,不如自己会一点点小脚本,自己灵活配置来得舒服。
ImportExcel的许多宝藏等着挖掘
相对于像Excel催化剂那样的插件实现,自己把这个Excel轮子研究一下,可能出来的结果更合自己的口味,此轮子有大量的示例文件供学习,在github上可以找到,或者不想找,后台回复【ImportExcel】给大家发送。
忍不住给大家再展示一条命令,Excel催化剂未有实现的文件对比功能,两个工作表的数据差异对比,提供参照列,对比列的参数即可完成。最终结果如下:橙色是不同,绿色是新增,粉色是删除。
按对应的参数填写好,复制一下就完事,当然在作者的示例文档里直接复制更容易。
代码语言:javascript复制Merge-Worksheet -Referencefile "$env:tempserver1.xlsx" -Differencefile "$env:tempServer2.xlsx" -OutputFile "$env:tempcombined1.xlsx" -Property name,displayname,startType -Key name -Show
数据库写入数据利器Write-ObjectToSQL
除了玩Excel外,数据库也是必玩的,所以也顺便介绍一个刚发现的不错的轮子Write-ObjectToSQL,将任何对象上传到Sqlserver中,如我们读入一个Excel文件,就可以把这个文件数据上传到Sqlserver上,无需提前建表。或者在运行过程中生成的不同的对象集合,一样可以上传。
按实际需要填写好参数。
代码语言:javascript复制Import-Excel -Path F:自媒体相关其他文章分享powershell轮子combined.xlsx|Write-ObjectToSQL -Database Test -Server localhost -TableName TestTable
就这么简单,一句命令,就可以将Excel表数据上传到Sqlserver上。,并且代码也是接近人的语言,用界面填写下参数就完成了,门槛足够低。
结语
如今任何一门语言都是有大量的现成轮子存在可供使用,PowerShell的轮子也真不少,算上其微软自身产品Windows、Sqlserver、ExChange、OFFICE等等大量的现成cmdlets命令,再外加社区的轮子,有能力的话,还可以把dotNET社区里的轮子也一并使用起来,是不是非常爽了呢。
简单入门一下语法,又可以打开一扇大门,从中得到广阔的世界,这就是轮子消费者的境界。
笔者未来聚焦在数据领域的分享,不限于Excel,会分享更多Sqlserver、dotNET、Azure、PowerBI等话题,升级数据分析的能力,欢迎继续关注。*
系列文章
1-在VisualStudio上使用PowerShell https://www.jianshu.com/p/b270611bb9ea 2-有哪些可用的场景及方式?https://www.jianshu.com/p/52fbbdc4f46b 3-会使用Excel简单函数就能上手PowerShell https://www.jianshu.com/p/f22cf85afb85