你如何使用 PowerShell? [关闭]
Posted
技术标签:
【中文标题】你如何使用 PowerShell? [关闭]【英文标题】:How do you use PowerShell? [closed] 【发布时间】:2010-09-05 17:48:10 【问题描述】:Windows PowerShell 去年问世,得到了许多 .net 博主的好评(想到了Hanselman)。它似乎被吹捧为一个伟大的新实用程序,它以某种方式使您在命令行上所做的一切变得更容易,并与 .Net 集成。但是,我阅读的越多,它似乎就越适合 IT 专业人员,而对开发人员来说用处不大。
您在开发工作中使用 PowerShell 吗?如果是这样,怎么做?值得学习吗?
注意:在看到到目前为止的回复之后,我认为可以得出结论,PowerShell 对 .Net 开发人员非常有用。但是,下面没有一个答案可以标记为 the 答案(所以请原谅我没有这样做)。我会投票支持我认为有帮助的每个答案。
【问题讨论】:
【参考方案1】:虽然我还没有学会如何充分使用它,但我是它的粉丝,因为它支持我熟悉的大多数(如果不是全部)Unix 命令,用于使用命令行进行导航。如果您有 *nix 经验并且正在 Windows 上开发,我建议您使用它,因为您只需要记住一组命令。
不过,我对我所说的话持保留态度。在构建和编译方面,我使用命令行功能。
【讨论】:
【参考方案2】:我很少将它用于实际的开发工作。我用它来自动设置虚拟目录并执行一个 scipt,在我们所有的开发机器上设置具有相同设置的 IIS
【讨论】:
【参考方案3】:我将它用于 IT Pro 类型的东西相当多(这非常棒),但不要认为我在开发中使用它太多 - 偶尔用于快速尝试类似 String.Format 的东西。我将要做的事情是为我们的一些应用程序开发 powershell commandlet - 允许管理员通过 powershell 执行诸如用户管理之类的任务,但我不认为这真的是你的意思。
【讨论】:
【参考方案4】:它从来没有被用作我的开发角色的一部分,但我时不时地得到一个任务,我会编写一个小程序来自动化,我现在强迫自己在 powershell 中完成它需要更少的时间。
例如,我最近使用 xcopy 将数十万个文件从一台服务器移动到另一台服务器,但忘记设置属性以保留文件的创建日期。 Powershell 来救援。在十分钟内,我编写并测试了一个脚本,该脚本复制了创建日期,而无需重新复制文件。
【讨论】:
哇!你能给我们看看脚本吗?【参考方案5】:就我个人而言,我使用 Python 来自动执行任务,如果需要,我会使用 WMI。我认为这种组合可以满足大部分我的需求。
我测试了 PowerShell,我觉得它看起来不错,但不值得学习一个全新的工具。除此之外,如果您需要或想要 (PowerShell Live) 或什至 recipes 来完成任务,而无需自己通过整个学习曲线,在线上有很好的资源来掌握 PowerShell。
【讨论】:
【参考方案6】:绝对值得学习。你曾经转换过文本吗?您是否曾经操作过 XML?你曾经自动化过任何事情吗?简单的例子。有人给了你一个逗号分隔的文件,你需要从中提取一些字段以导入其他工具/数据库或为你的程序创建一些列表。
如果 csv 在文件的第一行中有字段名称,您可以在 Powershell 中执行以下操作:
$Data = import-csv "something.csv"
然后您可以使用字段名称引用您的数据。如果您有一个名为 SSN 的字段,那么您可以说 $Data[n].SSN。您也可以将 import-csv 命令通过管道传输到处理数据的内容,包括将其导出为 XML/html 或只需几个命令即可。 Powershell 充满了这样的东西。
它是一种工具,可让您大量访问工作站和服务器上的大量内容,包括完整的 .NET 库。这是一种不针对某一类人的工具。也许只是 Admin 类型很快意识到它是多么有用。我每天都用它。
为了真正回答所提出的问题,我使用它来自动化我每天所做的事情。我正在尝试使其成为我的单一脚本语言,取代我在 perl、python、vbscript、.bat/.cmd 和我将创建的一个小实用程序/转换程序中所做的事情。
【讨论】:
【参考方案7】:我刚刚完成了一个托管 PowerShell 运行时以在远程系统上执行任务的项目的版本 1。我完全不同意 PowerShell 不是开发工具。
作为基于 .NET 的产品,它直接类似于 .NET 编程。整个 .NET 程序可以在 PS 中进行原型设计,也可以使用小单行程序来测试方法的功能……等等。 PS 的语言架构师专门设计了接近 C# 的 PS 语法,这意味着在编写 PS 脚本和 C# 代码时几乎没有上下文切换(我最近不得不做很多事情)。您正在使用 PS 构建您已经通过 .NET 语言来之不易的知识。
作为一种自动化工具,它非常棒。它可以原生访问 WMI、ADO、ADSI、.NET、COM,并且可以点焊以与其他任何东西一起使用。仅此一项就使任何 Windows 自动化变得更容易、更强大。对系统的访问量与其他一些语言(VBscript、Python)相当,但该语言的易用性和 .NET 框架的优势意味着一些 PS 脚本将现有代码(代码重用)捆绑在一起,而不是浪费你的时间编写另一个文件压缩例程(例如......)
已经有一些项目正在制作构建工具(我想到了psake),以使开发人员的生活更轻松。 Powershell Community Extensions 等项目展示了日常开发人员可以实现的强大扩展功能。我同意上面的一些海报,我认为为设置构建环境或处理开发任务的数据所做的任何事情,都可以用 PS 完成,如果不是更快/更容易/更好,但也一样。
詹姆斯
【讨论】:
【参考方案8】:在我看来,WPS 是一种让您的生活更轻松地做您需要的事情的方式。我不认为你会发现 WPS 集成到 FireFox 或 Quicken 中,但那些团队可能会使用它来做这些事情......简而言之,“WPS 不会让你的程序变得更容易,WPS 会让你的程序更容易。” ;o)
【讨论】:
【参考方案9】:我是一名行业管理员,刚开始涉足“开发”领域,但我发现 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-MyApplicationUser 并完成。Exchange 2007 团队做得很好。所有功能都基于 PowerShell cmdlet,GUI 调用 cmdlet 并向用户显示正在运行的内容,因此他们可以基于此构建脚本.
真是太酷了!在大约 250 行(包括 cmets)中,Rob Foust 和 Jeff Hicks 用 PowerShell 编写了一个网络嗅探器。比 WinDump 更容易用于轻量级故障排除。
社区 - 有一个以 PowerShell 为重点的优秀社区,包括开发人员。访问 PowerShellCommunity.org 了解更多信息。
【讨论】:
【参考方案10】:@EdSwangren - 如果您必须主要在 Windows 平台上工作并在 .NET 空间中工作,我会全心全意地建议您花时间学习 PowerShell。它可以利用您现有的 .NET 经验和代码,与 COM、WMI 和 ADSI 一起使用。它允许您访问 Windows 平台上的几乎所有内容(这只是 V1)。 V2 正在积极开发中(CTP2 现已推出),将包括更多远程处理、STA 线程和许多其他改进。
许多供应商也支持 PowerShell - 从 /n Software 提供网络 cmdlet,到 Citrix 和 VMWare 通过 PowerShell 提供管理 api。
【讨论】:
【参考方案11】:您可能讨厌 Powershell,但它仍然对您非常有用。我将它用于小而重要的单行类型的事物或非常小的脚本中。它真的无法与 C# 相比,所以一旦有任何复杂性或显着的潜在重用,我就会切换到 C#。此外,重要的是,Powershell 非常时髦,以至于我每次都想从头开始重新创建解决方案,否则我会忘记其中有很多的怪癖。我也听别人这么说!
真正有用的例子:
临时文本处理。有时人们会给我一个大数据或 SQL 文件,他们希望将其处理成不同的形式,有时以非常复杂的方式。仅这一点就为我节省了大量的时间。它通常涉及大量临时单行文件和中间文件。现在人们知道我可以做到这一点,他们倾向于把这些项目交给我。或者在某些情况下,他们惊叹不已,以至于他们自己学习了 Powershell。
当我在客户现场并迫切需要自动化某些东西时,这是我可以和/或被允许使用的唯一工具。
用于登录网站并导航到我感兴趣或正在处理的任何页面的小脚本。我从不手动登录我正在开发的网站。微不足道,但这是我需要担心的一项不那么烦人的重复脑死任务。
用于复制文件和项目以及搜索和替换的单行代码。
用于构建的小脚本,如果涉及任何不寻常的复杂情况。
等等。您的系统中肯定会有一些小问题,您需要停止/启动服务来修复其他问题,或者其他什么。
【讨论】:
【参考方案12】:我用它来尽可能多地自动化事情。一个例子是Web UI Automation,用于简化应用程序开发/测试。
我还使用它为各种程序生成随机输入文件。例如,一个应用程序需要一个 XML 文件,而我有一个脚本来构建该文件,该文件具有随机值和基于当前时间的唯一 ID。
我不经常使用它,但我每天都在使用它。
【讨论】:
【参考方案13】:我将 PoSH 用于管理网络、域、计算机、AD 用户、文本编辑、文件搜索、文件服务器迁移、监控等我必须做的任何“重复”工作,而且还很有趣!
【讨论】:
【参考方案14】:我用它来启动多个进程,还有一些cmd不能做的事情。
【讨论】:
以上是关于你如何使用 PowerShell? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使程序仅在使用批处理或 powershell 有 Internet 连接时运行? [关闭]
如何编写使用快捷方式关闭 PowerShell 的 AHK 脚本?