Powershell有哪些⽤途
最近⼀次偶然的机会让我接触到了PowerShell,给我的感触很深,所以希望跟⼤家分享⼀下。先谈⼀下事情经过吧,我为什么会接触到PowerShell呢。⼀周以前,我所在的项⽬经历了⼀个⽉版上线。上线之后出了点问题,我和项⽬经理在⽣产机房操作间解决问题时,碰到了这样⼀个问题,我们系统通过数据仓库取了其他系统的数据⼀些表使⽤,每天每张表数据导⼊时都会⽣成相应的⽇志⽂件记录导⼊的数量。当我想查看所有⽇志⽂件中对应表导⼊数量的时候,我采取的做法是⼀个⼀个⽂件依次打开的⽅式。这时项⽬经理提到,要是有Linux 环境就好了,我们可以将这批⽂件放在服务器上,通过grep命令快速筛选我们想要的内容。我说确实是啊,但是我们现在没有这个环境也没办法。此时项⽬经理告诉我,或许可以尝试使⽤Windows系统的PowerShell功能帮助我们。起初听到这个词的时候,我能⼤概猜到是⼀个命令⾏有关的东西。项⽬经理说它能在Windows下实现Linux grep命令的功能,随后他百度了具体⽤法后,果不其然地帮助我解决了问题。不得不说,项⽬经理是⼀个命令⾏达⼈。
说下我们当时的场景吧。当时我⼿⾥边有⼏⼗个⽇志⽂件,每个⽇志⽂件中都有相同的关键字——“Rows are loaded.“⽤来显⽰没张表被导⼊的数据量。我希望统计出所有表被导⼊的数据量,最开始我使⽤的⽅式是⼀个⼀个⽂件打开出⾥⾯被导⼊数据量的地⽅记录在另⼀个⽂件中。显然,这样做是很耗时的,效率低不说,⽽且可能出错。现在说⼀下后⾯我是如何使⽤PowerShell⾼效地达到这⼀⽬的的。因为现在没有当时的那批⽇志⽂件,所以以ok⽂件(也是⽂本⽂件)⽰例。现在我的桌⾯有⼀个data的⽂件夹,⾥⾯放
了以很多⽇期命名的⼦⽂件下,⼦⽂件下有⼀批.data和.ok⽂件。.dat⽂件是数据⽂件,.ok⽂件是数据⽂件对应的记录⽂件,存有数据量信息。如下图所⽰:
ok⽂件内容格式如下:路径名|记录数
powershell创建目录现在我希望提取出该⽂件夹下所有ok⽂件中的这个记录数输出到⼀个⽂件中,可以采⽤以下办法。
Windows下有个PowerShell命令⾏,⽆需安装,直接内置系统当中。我们可以通过cmd进⼊PowerShell,如下图:
然后我们可以使⽤cd命令进⼊到相应的⽂件⽬录下:
接下来就是问题的关键了,我们知道Linux下有个grep命令,然⽽PowerShell下也有个类似的命令Select-String,最简单的⽤法是Select-String "匹配的内容" *.⽂件后缀 > ⾃定义⽂件名.⾃定义⽂件后缀,如我们需要提取每个ok⽂件内容中的记录数这⼀⾏(当然,这⾥只有⼀⾏,然后很多场景下内容不只⼀⾏),可以使⽤:Select-String ".dat" *.ok > ok.log,“>”和Linux系统中⼀样,表⽰重定向,这⾥是把提取的内容全部输出到⼀个ok.log⽂件当中,这⾥会⾃⼰帮我们创建该⽂件。
接下来我们在PowerShell⾥⾯输⼊该命令,然后回车:
虽然没有任何提⽰,但我们可以去⽂件⽬录下看⼀下,发现⽣成了⼀个ok.log⽂件,打开⽂件,查看内容如下:
可以看到,很轻易地就实现了我想要的功能,将所有⽂件中的关键内容提取到⼀个⽂件当中,⽽不⽤我们⼀个⼀个⽂件打开然后拷贝到统⼀的地⽅。
我们时常会碰到这种问题,⼀堆⽂件的格式⼀样,只是⾥⾯的内容不⼀样。当我们需要提取其中的内容时,我们没必要依次打开所有⽂件去出⾥⾯的部分内容。使⽤PowerShell可以很简单地解决这个问题,是不是极⼤地提⾼了⽣产⼒呢。当然,PowerShell下还有很多⽅便的功能,这就需要⾃⼰去学习和探索了。