你如何使用PowerShell?

时间:2008-08-12 12:04:14

标签: .net powershell command-line scripting

Windows PowerShell去年问世了,得到了许多.net博客的好评(Hanselman浮现在脑海中)。它似乎被吹捧为一个伟大的新工具,以某种方式使您在命令行上所做的一切变得更容易,并与.Net集成。但是,我阅读的内容越多,它似乎就越适合IT专业人员使用,对开发人员用得不多。

你在开发工作中使用PowerShell吗?如果是这样,怎么样?值得学习吗?

注意:到目前为止看到响应之后,我认为结论PowerShell对.Net开发人员非常有用是有效的。但是,下面没有一个答案,我可以将其标记为 答案(所以请原谅我不这样做)。我正在投票给我发现有帮助的每个答案。

14 个答案:

答案 0 :(得分:12)

我是一名管理员,只是从“开发”世界开始,但我发现PowerShell在很多方面对开发人员非常有用。

  1. 任务自动化 - > Lee Holmes(PowerShell团队的开发人员)发布了一个名为BgShell的概念验证,它基本上是一个托管在Windows窗体应用程序中的PowerShell运行时,它监听键击并启动基于它们的PowerShell编写的操作。它还包括一些剪贴板自动化。
  2. 快速访问.NET框架。您不必编译和运行某些东西或使用其他程序(如Snippet Compiler)来测试某些功能。将程序集加载到PowerShell会话中并与之交互。您可以获得PowerShell的所有可发现性(例如Get-Member)来探索您的对象。
  3. 易于构建特定于域的语言。 James Kovacs用PowerShell编写了一个名为Psake的简单构建脚本语言。
  4. 它可以为您的应用程序提供脚本语言。由于PowerShell是09通用工程标准的一部分,因此许多Microsoft应用程序将具有PowerShell接口,并且对语言语法的熟悉程度将会增加。您可以通过在应用程序中嵌入PowerShell运行时并为用户提供脚本界面,选择他们可以访问的对象来利用这些知识。
  5. 同样,如果您需要为应用程序创建命令行界面,PowerShell提供了解析参数和其他基本任务所需的大部分底层管道,只留下业务逻辑供您编写,并提供与其他应用程序的一致接口(例如,如果您有需要管理的用户帐户(尚未与Active Directory集成,管理员可以(使用Quest AD Cmdlet和您的应用程序界面)Get- QADUser | New-MyApplicationUser并且已经完成.Exchange 2007团队做得非常好。所有功能都基于PowerShell cmdlet,GUI调用cmdlet并向用户显示正在运行的内容,因此他们可以基于此构建脚本
  6. 这很酷!在大约250行(包括评论)中,Rob Foust和Jeff Hicks在PowerShell中编写了一个网络嗅探器。比WinDump更易于使用,以进行轻量级故障排除。
  7. 社区 - 有一个围绕PowerShell的优秀社区,包括开发人员。请访问PowerShellCommunity.org了解更多信息。

答案 1 :(得分:12)

绝对值得学习。你有转换文字吗?你有没有操纵过XML?你有没有自动化什么?简单的例子。有人给你一个逗号分隔文件,你需要从中提取一些字段以导入到其他工具/数据库或为你的程序创建一些列表。

如果csv在文件的第一行中有字段名称,您可以在Powershell中执行以下操作:

$Data = import-csv "something.csv" 

然后,您可以使用字段名称来引用您的数据。如果您有一个名为SSN的字段,那么您可以说$ Data [n] .SSN。您还可以将import-csv命令传递给处理数据的内容,包括将其作为XML / html或任何您想要的内容导出,只需几个命令即可。 Powershell充满了这样的东西。

这是一个工具,可以让您在工作站和服务器上获得大量内容,包括完整的.NET库。这是一种不针对某类人的工具。也许只是管理员类型已经很快意识到它是多么有用。我每天都用它。

要真正回答问题,我会用它来自动化我每天所做的事情。我试图使它成为我的单一脚本语言,取代我在perl,python,vbscript,.bat / .cmd中所做的事情,以及我将创建的一个小实用程序/转换程序。

答案 2 :(得分:6)

你可以讨厌Powershell,但它对你来说仍然非常有用。我将它用于小而重要的单行类型的东西或非常小的脚本。它实际上无法与C#进行比较,因此只要有任何复杂性或重要的潜在重用,我就会切换到C#。另外,重要的是,Powershell非常时髦,我想每次都从头开始重新创建解决方案,否则我会忘记怪癖,其中有很多。我听过其他人也这么说了!

它真正有用的例子:

  1. 临时文本处理。有时人们会给我一个大数据或SQL文件,他们希望它被操纵成一种不同的形式,有时候是以非常复杂的方式。仅这一点就为我节省了不可思议的时间。它通常涉及许多特殊的单行和中间文件。现在人们知道我可以做到这一点,他们倾向于把这些项目交给我。或者在某些情况下,他们如此惊叹,以至于他们自己学习Powershell。

  2. 当我在一个客户网站并且迫切需要自动化某些东西时,它是我能够和/或被允许接触的唯一工具。

  3. 登录网站并导航到我感兴趣或正在处理的任何页面的小脚本。我从不手动登录我正在开发的网站。琐碎,但这是一个不那么恼人的重复脑死亡任务,我需要担心。

  4. 单行复制文件和项目,搜索和替换。

  5. 如果涉及任何异常复杂情况,可以使用很少的脚本进行构建。

  6. 等。你的系统肯定会有一些小问题,你需要停止/启动服务来修复别的东西,或者其他什么。

答案 3 :(得分:5)

我刚刚完成了一个项目的第1版,该项目托管了PowerShell运行时以在远程系统上执行任务。我完全不同意PowerShell不是开发人员的工具。

作为基于.NET的产品,它直接类似于.NET编程。整个.NET程序可以在PS中进行原型化,也可以使用很少的oneliner来测试方法的功能......等等。 PS的语言架构师专门设计PS的语法接近C#,这意味着在编写PS脚本和C#代码时很少有上下文切换(我最近不得不做的事情)。您正在利用使用PS的.NET语言已经很难获得的知识。

作为一种自动化工具,它非常棒。它可以本机访问WMI,ADO,ADSI,.NET,COM,还可以点焊以与其他任何东西配合使用。仅这一点就可以使任何Windows自动化更容易,更强大。对系统的访问量与其他一些语言(VBscript,Python)并行,但语言的易用性和.NET框架的好处意味着某些PS脚本将现有代码(代码重用)捆绑在一起而不是浪费你的时间写另一个文件压缩例程(例如......)

已经有一些项目正在制作构建工具(psake浮现在脑海中),以使开发人员的生活更轻松。像Powershell Community Extensions这样的项目展示了日常开发人员可以实现的强大扩展功能。我同意上面的一些海报,我认为在设置构建环境或使用数据进行开发任务方面所做的任何工作都可以用PS完成,如果不是更快/更容易/更好,但也是如此。

詹姆斯

答案 4 :(得分:3)

它永远不会被用作我的开发角色的一部分,但我偶尔会得到一个任务,我会写一个小程序来自动化,我现在强迫自己在powershell中做,并且花费的时间更少。

例如,我最近使用xcopy将数十万个文件从一个服务器移动到另一个服务器,忘记设置该属性以保留文件的创建日期。 Powershell来救援。在十分钟之内,我编写并测试了一个脚本,复制了创建日期而无需重新复制文件。

答案 5 :(得分:2)

@EdSwangren - 如果您必须主要在Windows平台上工作并在.NET空间中工作,我会全心全意地建议您花时间学习PowerShell。它可以利用您现有的.NET体验和代码,与COM,WMI和ADSI配合使用。它允许您访问Windows平台上的所有内容(而且只是V1)。 V2正在积极开发中(CTP2现已上市),将包括更多远程处理,STA线程和许多其他改进。

许多供应商也支持PowerShell - 从提供网络cmdlet的软件到Citrix和VMWare,通过PowerShell提供管理API。

答案 6 :(得分:1)

我很少用它来进行实际的开发工作。我已经用它来自动设置虚拟目录并执行一个scipt,在我们所有的开发机器上使用相同的设置设置IIS

答案 7 :(得分:1)

就个人而言,我正在使用Python来自动执行任务,如果需要,可以使用WMI。我认为这种组合涵盖了的大部分需求。

我测试了PowerShell,它看起来很好,但是不值得学习一个全新的工具。除此之外,如果您需要或希望(PowerShell Live),甚至recipes完成任务而不必为自己传递整个学习曲线,那么有很好的在线资源来掌握PowerShell。

答案 8 :(得分:0)

虽然我还没有学会如何完全使用它,但我是粉丝,因为它支持我熟悉的大多数(如果不是全部)Unix命令,可以使用命令行进行导航。如果您有* nix经验并且正在Windows上进行开发,我建议您使用它,因为您只需要记住一组命令。

然而,拿着我说的一粒盐。在构建和编译时,我使用命令行功能。

答案 9 :(得分:0)

我将它用于IT Pro类型的东西(它很棒),但不要以为我已经将它用于开发 - 偶尔会快速尝试像String.Format这样的东西。我将要做的事情是为我们的一些应用程序开发powershell命令行开关 - 允许管理员通过powershell执行用户管理等任务,但我认为这不是你的意思。

答案 10 :(得分:0)

在我看来,WPS是一种让您的生活更轻松地完成所需事情的方法。我不认为你会发现WPS集成到FireFox或Quicken中,但是这些团队可能会用它来做那些事情......简而言之,“WPS不能让你的程序,WPS让你的程序变得更容易。” ; O)

答案 11 :(得分:0)

我用它来尽可能多地自动化。一个例子是Web UI Automation,以简化应用程序开发/测试。

我还用它来为各种程序生成随机输入文件。例如,一个应用程序需要一个XML文件,我有一个脚本来构建该文件,其中包含随机值和基于当前时间的唯一ID。

我没有大量使用它,但我每天都使用它。

答案 12 :(得分:0)

我将它用于多个流程启动。还有一些不能做的事情。

答案 13 :(得分:0)

我将PoSH用于管理网络,域名,计算机,AD用户,文本编辑,文件搜索,文件服务器迁移,监控以及娱乐的任何'重复'工作!