Python、PowerShell 或其他?
Python、PowerShell和其他脚本环境有什么好处呢?我们想要统一我们的脚本,目前使用的是bat和cmd文件作为标准。我觉得Python比这些更好,但我也在研究PowerShell和其他脚本工具。
这些脚本会用来触发一些过程,比如使用wget等工具来调用网络服务,或者其他需要按照特定顺序和特定参数运行的应用程序/工具。
我们主要在Windows环境下工作,但将来很可能需要支持Unix系统。
8 个回答
我们想要统一我们的脚本标准,目前使用的是bat和cmd文件作为标准。
听起来你们主要是在Windows环境下工作。
如果是这样的话,PowerShell会比Python更合适。
- PowerShell是Windows Server 2008自带的。这样就不需要在每一台新服务器上都去安装Python运行环境。
- 微软的所有服务器相关软件(比如Exchange、系统中心等)都在逐步转向使用PowerShell命令来实现功能和扩展。
- 第三方供应商(比如SCOM插件)也会使用PowerShell脚本/命令来提供功能。
我对Python的了解比PowerShell多,但从微软的生态系统来看,选择PowerShell是明智的。否则,你就会一直在Python和其他人的命令之间来回切换,显得很麻烦。
虽然你可以在Python中写import win32com.client
,但这并不能让它在Windows环境中与PowerShell平起平坐。
如果你想在Windows电脑上替代CMD和BAT脚本,Python是个非常不错的选择。它不仅可以在Windows上使用,还能在Linux上运行脚本。Python是一种灵活的编程语言,可以处理你交给它的各种任务。
不过,PowerShell在管理Windows系统方面非常强大。它拥有.NET的所有功能,并且可以与许多微软的产品(比如Exchange和Active Directory)进行更好的连接,这样可以节省很多时间。根据你的具体情况,使用PowerShell可能比其他脚本语言更有用,因为它能更方便地与微软的产品进行交互。而且,PowerShell在所有当前版本的Windows上(Windows 7及以上,Windows Server 2008及以上)都是预装的,安装在旧版本上也相对简单。
关于你提到的脚本会用来启动其他进程的情况,我觉得这两种工具都可以满足你的需求。如果你打算在脚本中添加一些管理类的任务,我建议使用PowerShell;但如果你只做你描述的那些事情,Python也是个不错的选择。
IronPython可以使用和其他.NET语言一样的所有.NET组件,这样你就可以在Windows上写一些依赖系统的脚本。不过,你在Python上学到的知识也可以用来在Linux、Solaris、BSD或OS/X上写类似的脚本。如果你在Windows上使用标准的C Python,那么你可以访问任何COM对象,而且把VBA的例子转成Python代码也很简单。SPAMBayes的Outlook插件就是一个很好的例子,展示了你可以做到的事情。 http://spambayes.sourceforge.net/
Python最棒的特点就是它的“自带电池”标准库,虽然这个库并没有和IronPython一起分发,但如果你把IronPython指向CPython安装的库文件夹,很多功能还是可以用的。实际上,大多数纯Python库(也就是没有编译的C或C++模块)在IronPython上都能正常工作。在Windows上,你还可以选择通过Cygwin.com安装Python,这样你就能使用很多通常只在UNIX上可用的模块。如果你需要维护跨平台的脚本,并且希望代码在各个操作系统上保持一致,这会很有帮助。
如果你需要用到一些Java类,Jython可以让你用你熟悉的Python语言来实现这个功能。把这个和像RabbitMQ这样的消息队列系统结合起来,你就可以在多台机器上运行Python、Jython和IronPython脚本,让它们一起合作完成任务。
还有很多第三方的Python模块可供选择,你可以花几个月的时间在delicious.com上寻找新发现。这意味着当你需要一些不在标准Python库里的东西时,稍微在网上搜索一下,通常就能找到解决方案。
一些有用的Python模块可以用来替代bash、CMD和BAT文件,比如PEXPECT http://www.noah.org/wiki/Pexpect 和Python WMI http://timgolden.me.uk/python/wmi/index.html。
不过,最终来说,Python也非常适合那些简单直接、不需要任何特殊功能的脚本……至少现在是这样!