【问题标题】:Python, PowerShell, or Other? [closed]Python、PowerShell 还是其他? [关闭]
【发布时间】:2010-12-22 12:49:03
【问题描述】:

Python、PowerShell 和其他脚本环境有哪些优势?我们希望标准化我们的脚本,目前使用 bat 和 cmd 文件作为标准。我认为 Python 会是比这些更好的选择,但我也在研究 PowerShell 和其他脚本工具。

这些脚本将用于触发诸如 wget 等进程以调用 Web 服务,或其他需要使用特定参数以特定顺序运行的应用程序/工具。

我们主要使用 Windows 堆栈,但将来我们很有可能需要支持 Unix。

【问题讨论】:

  • 这个问题有一些无用的答案。要么是擅长 Python 的人,要么是擅长 PowerShell 的人……如果你正在与 Active Directory 交互,PowerShell 是迄今为止最简单的方法。如果您正在编写 GUI 应用程序或需要跨平台支持 - 可能是 Python。每种语言都比另一种做得更好。

标签: python powershell scripting


【解决方案1】:

如果您希望替换 Windows 机器上的 CMD 和 BAT 脚本,Python 可以作为一种出色的通用工具,也可以编写为在您的 (L)inux 机器上运行脚本。它是一种出色、灵活的语言,可以处理您交给它的许多任务。

话虽如此,PowerShell 是一个非常通用的工具,用于管理各种 Windows 机器;它具有 .NET 的所有功能,具有更多与 MS 产品(如 Exchange 和 Active Directory)的接口,可节省时间。根据您的情况,您可能会比其他脚本语言更多地使用 PS,这仅仅是因为 MS 产品可用的接口,而且我知道 MS 似乎已承诺在许多产品中提供这些 API。 PowerShell 安装在所有当前版本的 Windows(Windows 7+、Windows Server 2008+)上,并且相当容易安装在旧版本上。

为了解决您的脚本将用于启动其他进程的编辑问题,我认为在这种情况下,任何一个工具都符合要求。如果您计划向脚本添加任何管理任务,而不仅仅是服务调用,我会推荐 PS,但如果您坚持您所描述的,Python 是好的。

【讨论】:

  • +1 很好的答案,但我认为他需要指定他计划在哪些操作系统上执行此操作以获得更好的答案。
  • 我不能代表 Powershell,但 Python 是比 VBA 编写 MS Word 脚本(通过 OLE 自动化)更好的方法。
  • 你说得对,J.F.,用他们自己的语言使用 MS Office 产品似乎有多么困难……也许我错过了什么
  • @MattGWagner 首先,word 接受 HTML - 没有理由使用某些第三方 python 库来编写 word 文档。其次,尝试在 Python 中读取 csv...(可能需要第三方库)与这个单行 PowerShell 命令:$csv = Import-Csv 'C:\path\to\file.csv',它几乎存在于 2003 年以后的任何 Windows 系统上。
【解决方案2】:

我们希望标准化我们的脚本,目前使用 bat 和 cmd 文件作为标准。

听起来 Windows 是您的主要环境。

如果是这样,PowerShell 会比 Python 好得多。

  • PowerShell 包含在 Windows 中 Server 2008. 不需要 部署/安装 Python 运行时 每一个新的服务器加入。
  • 整个 Microsoft 服务器相关软件(Exchange、Systems Center 等)正在过渡到 PowerShell cmdlet 以获得功能和扩展
  • 第三方供应商(例如 SCOM 插件)也将使用 PowerShell 脚本/cmdlet 来公开功能

我在 Python 方面的经验比 PowerShell 多,但就 Microsoft 生态系统而言,我写的是:使用 PowerShell。否则,您将违背常规,不断在 Python 和其他所有人的 cmdlet 之间进行互操作。

仅仅因为您可以在 Python 中编写 import win32com.client 并不能使其与 Windows 环境中的 PowerShell 处于同等地位。

【讨论】:

    【解决方案3】:

    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 脚本,所有这些都可以协作完成工作。

    还有大量可供选择的第 3 方 Python 模块,您可以在用完新发现之前花几个月的时间浏览delicious.com。这意味着当您需要一些不属于标准 Python 库的东西时,通常会通过谷歌搜索找到解决方案。

    用于替换 bash、CMD 和 BAT 文件的一些有用的 Python 模块是 PEXPECT http://www.noah.org/wiki/Pexpect 和 Python WMI http://timgolden.me.uk/python/wmi/index.html

    但是,最后,Python 也适用于不需要任何特殊功能的简单直接脚本......但是!

    【讨论】:

    • IronPython 相对于 PowerShell 的另一个优势是,对于回溯版本的操作系统,只要您已经存在 .net,它就可以通过 XCOPY 部署推出。
    【解决方案4】:

    如果您所做的只是生成大量系统特定的程序,而背后没有或只有很少的编程逻辑,那么特定于操作系统的 shell 可能是比完整的通用编程语言更好的选择。

    【讨论】:

      【解决方案5】:

      Python 的一个优势是第三方库和广泛的内置标准库的可用性。您可以在各种操作系统和环境中使用 Python 快速轻松地进行许多强大的操作。这就是我们在办公室使用 Python 的原因之一,它不仅作为脚本语言,而且还用于我们所有的数据库后端应用程序。

      我们还将它用于 XML 和 HTML 抓取,使用 ElementTree 和 BeautifulSoup,它们是用于此类工作的非常强大且灵活的 Python 特定库。

      【讨论】:

        【解决方案6】:

        我觉得很遗憾没有人提到好的 Perl。

        【讨论】:

        • PowerShell 是它的后代之一。
        • PowerShell 仍处于其根源,并且通常仅在 7 下可用(是的,我知道它可以安装在 xp 上)。尽管 Perl 根本不是 Windows 原生的,但我仍然觉得它更实用,因为它适用于所有 Windows 版本,而且它的许多可用性是可移植的。更不用说操作人员希望某人已经在其中完成的任何事情
        【解决方案7】:

        问题有点模糊,但 Python 比 PowerShell 更便携;但是,Python 在 Windows 上并不流行。但另一方面,我不相信 PowerShell 脚本可以在没有 PowerShell 的 Windows 机器上运行。这意味着它们可能无法在老式的 cmd shell 中工作。我想你也会找到更多的 Python 文档和库。

        PowerShell 更像是 Bash,而不是像 Python 这样的编程语言。

        也许你可以解释你想用你的脚本做什么,你可能会得到更好的答案。

        【讨论】:

        • 问题被编辑得更清楚,所以我的回答可能看起来有点傻。
        • 为什么不编辑答案?
        • 你错了; PowerShell 是一种面向对象的编程语言。您在可移植性方面也存在一定程度的错误 - 存在将 powershell 移植到 UNIX 环境中的 api
        • 我能够将 PowerShell 安装到 Debian 9.4 派生的 Linux(Bunsen Linux)docs.microsoft.com/en-us/powershell/scripting/setup/…
        【解决方案8】:

        如果您正在使用基于 Web 的脚本,那么 ActiveState 的 ActivePython 似乎对 Windows specific API's 有很多支持,这将适合您,并且它具有大量用于基于 Web 的工作的出色可移植库。

        【讨论】:

          猜你喜欢
          • 2019-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多