一开始接触POWERSHELL,是因为上司要求用脚本管理Hyper-V上面的操作系统和服务。实现一些产品在测试环境的部署和恢复。当然方法有很多,但是我第一时间,想起了现在比较流行的POWERSHELL. 并且找到了一个很方便的API: http://www.codeplex.com/PSHyperv . 对于完全没有接触过PS的我,我就开始看PSHyperV这个开源的类库,有时候,我觉得看开源API的确是快速上手一门语言的办法,当然,有一个比较好的IDE,高光一下里面的语法那就更加不错了。这个IDE 我选择了PowerGUI(Free!). 一番速成之后,评估结束,写了个文档,就给我们的IT用去了。值得一提的是,WMI Object在POWERSHELL里面的作用,当时我在想,没有了WMI,powershell就不POWER了。因此惊艳1, WMI
1. WMI Object:
WMI功能非常强大,可以操作本地和远程的电脑的服务,例如获取远程电脑的时间,设置远程电脑的某些服务,设置IIS,当然,还要操作HYPER-V的服务。配合使用WMIQuery,简直就方便到极点。
2. XML
旁边有个同事总说, 罪恶的XML呀....本人基本同意,我还是喜欢简单的JOSN多一点。但是在POWERSHELL里面的XML就没有那么罪恶啦,使用非常简单,例如:
<dataroot>
<abc><cde>罪恶</cde></abc>
</dataroot> 在文件 TEST.XML中
想拿到某个节点的内容,EASY到不得了,[xml]content = Get-Content test.xml
content.dataroot.abc.cde 这样,就能够获得内容了。神了。Conent究竟是什么,Content.GetType()之后发现,原来还是XmlDocument......PS一句,微软的东西,功能总做得方便得不得了,但是背后,当然就是牺牲性能啦。
3. 对环境变量,对注册表的操作
对环境变量和注册表的操作,也是简单得不了。$env:COMPUTERNAME ....
4. 一切皆为对象(PYTHON也这样说过)
这个怎么表达好呢。你可以这样做 $files = dir. 然后 $files.GetType()
5. 扩展性超好
继承一下powershell提供的CMDLET,Snapin,在C#里写一下,就可以有自己的SNAPIN了. 然后在POWERSHELL里面加载一下Installutil,Add-PSSnapin.有人就有疑问,有啥好处呢? 我告诉你,你写的SNAPIN,比起在POWERSHELL里定义函数,你能获得,按TAB的智能提醒,构建自己强大的GET-HELP(http://blogs.msdn.com/powershell/archive/2007/09/01/new-and-improved-cmdlet-help-editor-tool.aspx ),也就是帮助, 实现灵活的使用方式,强大的内置的校验机制。
最后奉上,POWERSHELL之歌:http://landofsilly.mypodcast.com/2009/01/PowerShell_Wizard-177292.html