我啥时候会在传统应用程序上使用 PowerShell?
Posted
技术标签:
【中文标题】我啥时候会在传统应用程序上使用 PowerShell?【英文标题】:When would I use PowerShell over traditional applications?我什么时候会在传统应用程序上使用 PowerShell? 【发布时间】:2010-09-01 16:17:26 【问题描述】:我最近听到了很多关于 PowerShell 的消息,想知道是否有任何理由使用 PowerShell,而不是(例如)在后台使用 WMI 的控制台应用程序或 Windows 服务。
PowerShell 有哪些好处和优势?有什么用?
【问题讨论】:
【参考方案1】:PowerShell 是一个交互式 shell,如 KornShell、Bash 和 er CMD.exe。和那些 shell 一样,它支持脚本语言(KSH、Bash、Batch)。然而,PowerShell 是在 .NET 之上构建的,它公开了 .NET 类型,并允许您创建和操作许多 .NET 类型。因此,您可以使用 PowerShell 来构建可以执行典型 .NET 控制台应用程序可以执行的脚本。
编写小型实用控制台应用程序时要考虑的一个因素是您在编写解析和使用代码与实现 exe 基本目的所需的代码方面花费了多少精力。我已经改用 PowerShell 脚本编写许多实用程序,因为 PowerShell 提供了一个参数解析引擎,它具有许多不错的功能:命名/位置参数、必需/可选参数、参数的默认值、参数名称的部分规范等。
PowerShell 2.0 在这方面添加了更多功能(验证属性等)和高级功能。您可以轻松地将“手册页”编写为脚本或高级功能的 cmets。虽然我曾经花费 50-80% 的时间在 C# 控制台应用程序中处理片状、非标准(是 - 或/或两者?)参数解析代码,但我让 PowerShell 为我处理。不过,我确实相信 Jacob 的说法是正确的,即需要较低级别 .NET 代码的复杂任务会更容易正确完成(静态编译时间检查)并在 C#/VB/Visual Studio 中进行调试。
我希望看到 PowerShell 参数解析功能通过 BCL 中的一组 .NET 类型公开,这样您就可以编写控制台应用程序并获得 PowerShell 的解析功能。很久以前,我使用了一个名为 Genghis 的开源组件,但我认为它已经被放弃了。在 .NET 4.0 beta 的某个时刻,一个命令行解析器出现在框架中,但在 RTM 之前被删除。我不认为这个命令行解析器与 PowerShell 有任何联系——它应该有 IMO。所以它被拉下来可能是件好事。
【讨论】:
【参考方案2】:PowerShell 可以做很多 .NET 控制台应用程序可以做的事情,但它仍然是一种脚本语言。但它比批处理文件语言或 VBScript/JScript 好得多。它的优势包括能够使用类似 UNIX 的管道和过滤器,但使用对象而不是哑文本。它还可以创建 CLR 和 COM 对象并调用它们的属性和方法。
但是,如果您要编写任何复杂的东西,最好编写一个已编译的程序,这样您就可以在编译时发现错误并拥有更好的 IDE。此外,如果您想运行 PowerShell 脚本,则必须在运行它的计算机上安装 PowerShell。
【讨论】:
所以我真的不应该将它与 .NET 应用程序进行比较,而是将其与批处理文件和 VBScript 进行比较? 正确,尽管它也是非常简单、寿命短的 .NET 控制台应用程序(例如,执行简单文件操作的应用程序)的一个很好的替代方案。【参考方案3】:Powershell 的优势在于其简单性和特别是与 Microsoft 产品的互操作性。例如,在 Exchange 2007 和 2010 中,不使用 Powershell 就无法修改某些属性。直到 SP2,您甚至可以在 Exchange 2007 中管理公用文件夹。
其次,我非常喜欢 PoSh 中的一切都是对象。读取 CSV 文件之类的事情就像
$csv = import-csv c:\MyUsers.csv
您现在有了一个索引对象,每个列都可以通过它的列头访问。在许多其他语言中不容易完成的事情,afaik。
$csv[1].UserName
【讨论】:
以上是关于我啥时候会在传统应用程序上使用 PowerShell?的主要内容,如果未能解决你的问题,请参考以下文章