为什么我应该选择使用PowerShell而不是C#?

20

我知道PowerShell非常强大,因为它是一种脚本语言,可以访问整个.NET框架(这就是我所知道的全部)。但我不太理解为什么会有这么多人热捧PowerShell,即便我用C#编写同样的代码也可以实现。


3
@NinethSense:您不觉得您提供的链接是关于在PowerShell和C#中可以做什么吗?我想知道为什么我会选择PowerShell而不是C#。 - Draco
2
另一个问题更多地涉及从C#扩展或使用Powershell。绝对不是重复的。 - Joey
3
如果你比较这个问题和742262号问题,你应该都会注意到这不是一个重复的问题。 - devio
4个回答

19

我认为你提出了错误的问题。应该是:“为什么要使用C#,而不是用Powershell编写同样的代码?”

这是脚本与编译软件之争的老话题。脚本解决方案更加灵活(只需要记事本编辑脚本,无需编译器)。

对于小任务而言,编写、部署和更改脚本的速度都比在Visual Studio中创建项目、编译、部署到目标、修正代码、再次编译和再次部署要快得多。

但对于任何较大的任务,我绝对更喜欢使用能够编译我的代码的集成开发环境(IDE)。仅仅是在构建失败时的错误消息就能够帮助找到问题的原因。(虽然编译后的软件通常具有更高的运行效率,但随着现代CPU的发展,差异已经变得微不足道了,所以对于大多数项目来说,这已经不再重要。)

你可以使用C#或Powershell完成任何类型的项目。但并不意味着你应该这样做。


10

当不使用Powershell作为shell而是作为编程环境时,你可以将Powershell看作一种交互式的.NET playground。我从未使用Powershell进行GUI原型设计,但过去曾经用它来玩弄.NET对象及其方法来解决特定问题。仅仅改变命令行比每次进行编辑/保存/编译/运行循环更加高效。

此外,两种语言的适用领域非常不同。Powershell在本质上是一种管理和自动化工具,具有许多其他环境可能更加麻烦的东西的流畅访问,例如注册表、证书存储、WMI等。

你可能不想使用Powershell编写企业级数据库应用程序,也可能不想编写C#程序来在文件系统中复制某些内容。


3
  • 这不是一种编译语言。
  • 它有一个插件生态系统,有很多“库”用于执行各种特定领域的任务,例如复制文件、操作AD、Exchange等。
  • 它是一种适用于不同但略有重叠工作集的正确工具。
  • 它比CMD.EXE和其他源自命令行壳需要适应8K RAM的工具更加强大和一致。

而且你为什么要使用C#?ILASM可以做到更好的控制,而且你只是在调用BCL中的内容。


2

我将你的问题概括如下:

为什么我要使用(我很少了解的高级语言)而不是(我更熟悉的低级语言)?

高级语言的目的是抽象出常见任务,使它们更快地编写。许多人问这个问题,因为他们已经习惯了低级语言,无法想象高级语言的好处。

最终,一切都取决于你愿意学习高级语言的抽象,希望你能像低级语言一样熟练掌握它。


4
我认为PowerShell并不比C#本质上更高级,只是它们各自的任务领域非常不同。 - Joey
2
PowerShell确实更高级,仅因为“管道”概念使得重用和组合“片段”更容易...当您需要执行尚不存在现有脚本或cmdlet的操作时,PowerShell肯定会降到较低级别,但是cmdlet和函数的可组合性比C#(或Ruby/Python/Perl)中的任何内容都要高级。 - Jaykul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接