我们如何使用PowerShell?
Windows PowerShell去年问世,得到了许多.net博客作者的好评(Hanselman浮现在脑海中)。它似乎被吹捧为一个伟大的新实用程序,它以某种方式使我们在命令行上执行的所有操作变得更加轻松,并与.Net集成在一起。但是,我了解的越多,它似乎越是一种对IT专业人员有用的工具,而对开发人员却用处不大。
我们是否在开发工作中使用PowerShell?如果是这样,怎么办?值得学习吗?
注意:到目前为止,在看到响应之后,我认为可以断定PowerShell对.Net开发人员非常有用。但是,下面没有一个我可以标记为答案的答案(所以请原谅我不这样做)。我对我认为有帮助的每个答案进行投票。
解决方案
回答
尽管我还没有学会如何充分使用它,但我还是很喜欢它,因为它支持我熟悉的大多数(如果不是全部)使用命令行导航的Unix命令。如果我们具有* nix经验并且正在Windows上进行开发,则建议我们仅将其用于一组,因为它仅需记住一组命令。
但是,请按照我所说的加一点盐。当涉及到构建和编译时,我使用命令行功能。
回答
对于实际的开发工作,我很少使用它。我用它来自动设置虚拟目录并执行一个scipt,该scipt在我们所有的开发机器上使用相同的设置来设置IIS
回答
我将它用于IT Pro类型的东西(非常出色),但是我认为我偶尔会在快速尝试String.Format之类的开发中使用它。我要做的是为我们的某些应用程序开发Powershell Commandlet,以允许管理员通过Powershell执行诸如用户管理之类的任务,但是我认为这并不是意思。
回答
在我的开发角色中从来没有使用过它,但是我时不时地得到一个任务,我要编写一个小程序来自动化,现在我强迫自己在Powershell中进行操作,并且花费的时间更少。
例如,最近我使用xcopy将成千上万个文件从一台服务器移到另一台服务器,却忘记了设置属性以保留文件上的创建日期。 Powershell进行救援。在十分钟之内,我编写并测试了一个脚本,该脚本复制了创建日期,而无需重新复制文件。
回答
就个人而言,我使用Python来自动执行任务,并在需要时使用WMI。我认为这种组合可以满足我的大部分需求。
我测试了PowerShell,对我来说看起来不错,但是却不值得学习一个全新的工具。除此之外,如果我们需要或者想要(PowerShell Live)可以在线上掌握PowerShell的绝佳资源,甚至可以通过配方来完成任务而不必自己经历整个学习过程。
回答
绝对值得学习。我们曾经转换文字吗?我们曾经操纵过XML吗?你有没有自动化过的东西?简单的例子。有人给我们一个逗号分隔的文件,我们需要从文件中拉出一些字段以导入到其他工具/数据库或者为程序创建一些列表。
如果csv在文件的第一行中包含字段名称,则可以在Powershell中执行以下操作:
$Data = import-csv "something.csv"
然后,我们可以使用字段名称引用数据。如果我们有一个名为SSN的字段,则可以说$ Data [n] .SSN。我们也可以仅将import-csv命令传递给处理数据的对象,包括将其导出为XML / html或者仅需几个命令即可将其导出。 Powershell充满了这样的东西。
它是一种工具,使我们可以极大地访问工作站和服务器上的大量内容,包括完整的.NET库。这不是针对某类人的工具。也许只是Admin类型很快就意识到了它的用处。我每天都使用它。
为了真正回答所提出的问题,我使用它来自动化我每天所做的事情。我正在尝试使其成为我的单一脚本语言,以取代我在perl,python,vbscript,.bat / .cmd中所做的工作以及一个我将要创建的实用程序/转换程序。
回答
我刚刚完成了一个项目的版本1,该项目托管一个PowerShell运行时以在远程系统上执行任务。我完全不同意PowerShell不是开发人员的工具。
作为基于.NET的产品,它直接类似于.NET编程。整个.NET程序可以在PS中进行原型制作,而很少的其他人可以在其中测试方法的功能……等等。 PS的语言设计师专门设计PS的语法使其接近C#,这意味着在编写PS脚本和Ccode时几乎没有上下文切换(我最近不得不做很多事情)。我们正在使用PS在.NET语言已经难以获得的知识的基础上建立。
作为自动化工具,它是一流的。它本身可以访问WMI,ADO,ADSI,.NET,COM,还可以进行点焊以与其他任何东西一起使用。仅此一项,就可以使任何Windows自动化变得更轻松,更强大。对系统的访问量受其他一些语言(VBscript,Python)的影响,但是该语言的易用性和.NET框架的优势意味着某些PS脚本将现有代码(代码重用)联系在一起,而不是浪费时间编写另一个文件压缩例程(例如...)
已经有一些项目在使构建工具(想到的东西)使开发人员的生活更轻松。诸如Powershell Community Extensions之类的项目显示了正常的日常开发人员可以实现的强大扩展功能。我同意上面的一些海报,我认为为建立构建环境或者使用数据处理开发任务所做的任何事情,如果不是更快/更容易/更好的话,都可以使用PS来完成,但同样如此。
詹姆士
回答
在我看来,WPS是使生活更轻松地完成所需工作的一种方法。我认为我们不会发现将WPS集成到FireFox或者Quicken中,但是那些团队可能会用它来做这些事情……简而言之," WPS不能使程序变得容易,WPS会使程序更容易。" ; o)
回答
我是一名行业管理员,并且刚从" Dev"世界开始,但是我看到PowerShell在许多方面对开发人员都非常有用。
- 任务自动化-> Lee Holmes(PowerShell团队的开发人员)发布了一个名为BgShell的概念验证,它基本上是Windows窗体应用程序中托管的PowerShell运行时,它侦听击键并启动基于PowerShell的动作。它还包括一些剪贴板自动化。
- 快速访问.NET框架。我们无需编译和运行某些程序,也无需使用诸如Snippet Compiler之类的其他程序来测试某些功能。将程序集加载到PowerShell会话中并与其进行交互。我们将获得PowerShell的所有可发现性(例如Get-Member)来探索对象。
- 易于构建特定领域的语言。 James Kovacs用PowerShell编写了一种简单的构建脚本语言,称为Psake。
- 它可以为应用程序提供脚本语言。由于PowerShell是09通用工程标准的一部分,因此许多Microsoft应用程序都将具有用于PowerShell的接口,并且对语言语法的熟悉程度将会提高。我们可以通过将PowerShell运行时嵌入到应用程序中并为用户提供脚本接口,选择他们将有权访问的对象来利用这些知识。
- 同样,如果我们需要为应用程序创建命令行界面,PowerShell提供了很大一部分基础管道,用于解析参数和其他基本任务,只剩下业务逻辑供我们编写和提供与其他应用程序的接口一致(例如,如果我们需要管理用户帐户(尚未与Active Directory集成),则管理员可以(使用Quest AD Cmdlet和应用程序界面)Get-QADUser | New Exchange 2007团队做得很好,所有功能都基于PowerShell cmdlet,GUI会调用cmdlet并向用户显示正在运行的内容,因此他们可以基于此构建脚本。
- 太酷了!在大约250行中(包括评论),Rob Foust和Jeff Hicks用PowerShell编写了一个网络嗅探器。比WinDump更易于使用,可进行轻量级的故障排除。
- 社区-有一个围绕PowerShell的优秀社区,包括开发人员。在PowerShellCommunity.org上找到更多信息。
回答
@EdSwangren如果我们必须主要在Windows平台上工作并且在.NET空间中工作,我将全心全意地建议花些时间学习PowerShell。它可以利用我们现有的.NET经验和代码,并与COM,WMI和ADSI一起使用。它使我们可以访问Windows平台上的几乎所有内容(也就是V1)。 V2正在积极开发中(CTP2现在可用),并将包括更多的远程处理,STA线程和许多其他改进。
许多供应商还从提供联网cmdlet的/ n Software到通过PowerShell提供管理API的Citrix和VMWare,都支持PowerShell。
回答
我们可以讨厌Powershell,但它仍然对我们有用。我将它用于很小但很重要的一类事物或者非常小的脚本中。切换到C#时,如果真的存在任何复杂性或者潜在的重用性,它真的无法与Cso相提并论。同样,重要的是,Powershell非常时髦,我想每次都从头开始重新创建解决方案,否则我会忘记其中的怪癖。我听说其他人也这么说!
真正有用的示例:
- 临时文本处理。有时,人们会给我一个大数据或者SQL文件,他们希望将其操纵为其他形式,有时以非常复杂的方式处理。仅此一项就为我节省了不可思议的时间。它经常涉及许多临时的单线和中间文件。现在人们知道我可以做到这一点,他们倾向于将此类项目交给我。或者在某些情况下,他们是如此的震惊,以至于他们自己学习Powershell。
- 当我在客户现场急需进行自动化操作时,这是我可以和/或者被允许使用的唯一工具。
- 用于登录网站并导航到我感兴趣或者正在工作的任何页面的小脚本。我从不手动登录正在开发的网站。琐碎,但这又是我要担心的重复重复性脑死亡任务的烦人事。
- 一线可复制文件和项目,并进行搜索和替换。
- 如果涉及任何不寻常的复杂性,则很少编写脚本来进行构建。
- 等等,我们在系统中注定会有一些怪癖,我们需要在其中停止/启动服务以修复其他问题或者其他问题。
回答
我使用它来自动完成尽可能多的事情。一个示例是Web UI自动化,以简化应用程序的开发/测试。
我还使用它为各种程序生成随机输入文件。例如,一个应用程序期望一个XML文件,而我有一个脚本可以根据当前时间使用随机值和唯一ID来构建该文件。
我不会大量使用它,但是我每天都会使用它。