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