我正在争论我是否应该学习PowerShell,还是坚持使用Cygwin/Perl脚本/Unix shell脚本等等。

PowerShell的好处是,没有Cygwin的队友可以更容易地使用脚本;然而,我不知道我是否真的会写那么多通用脚本,或者人们是否会使用它们。

Unix脚本功能如此强大,PowerShell是否足以让我们切换到它呢?

以下是我在PowerShell中寻找的一些具体内容(或等效内容):

grep 排序 uniq Perl (PowerShell与Perl的能力有多接近?) AWK sed File(提供文件信息的命令) 等。


当前回答

在几行中,Cygwin和PowerShell是不同的工具,但是如果你安装了Cygwin,你可以在PowerShell会话中运行Cygwin可执行文件。我已经习惯了PowerShell,现在我不再使用grep, sort, awk等。在PowerShell中有很多内置的替代方案,如果没有,您可以在那里找到cmdlet。

我发现自己使用的主要工具是ssh.exe,但是在PowerShell会话中。

效果很好。

其他回答

我还没有看到PowerShell真正流行起来,至少现在还没有。因此,除非团队中的其他人已经知道它,否则学习它可能不值得。

对于您的困境,您最好使用其他人可以支持的脚本语言,如您提到的Perl或Ruby或Python。

我认为这在很大程度上取决于你需要做什么。就我个人而言,我一直在为自己的个人脚本使用Python,但我知道当我开始编写一些东西时,我永远无法将其传递下去——所以我尽量不做任何太有革命性的事情。

PowerShell功能非常强大,比Unix shell的标准内置功能更强大(但这只是因为它包含了许多通常分配给子程序的功能)。另外,考虑到你可以用任何。net语言编写小程序,包括IronPython、IronRuby、PerlNet等。或者你可以简单地从PowerShell调用你的Cygwin命令,忽略所有额外的功能,它将类似于Bash, KornShell,或任何…

为什么不两者都用呢?在Cygwin中调用PowerShell脚本,就像其他解释性脚本(如Perl)一样。

为此,我编写了https://bitbucket.org/jbianchi/powershell,以便Bash包装器在Cygwin中调用powershell.exe。它可以用作PowerShell .exe .ps1脚本的第一行shebang(因为PowerShell也使用“#”作为注释)。参见https://bitbucket.org/jbianchi/powershell/wiki/Home获取示例

由于我最近的实验让我深入了解了PowerShell和。net调用,我必须说PowerShell可以取代Cygwin和Unix shell。

我对Perl不太确定,但由于PowerShell和Perl作为编程语言都是图灵完备的,所以我认为也可以取代Perl。

PowerShell优于Cygwin和*nix下的普通Bash的一点是,它能够执行沙盒DLL调用,通过直接API调用、WMI方法甚至COM对象操纵操作系统。如何通过代码启动Internet Explorer,然后对其显示的文档做任何想做的事情,有效地模拟Web服务器的后端?

如何从SQL服务器和其他数据提供者收集数据,解析它们并导出为CSV、邮件消息、文本以及任何现有和不存在的文件格式?(当然,使用适当的技能从接收到的数据中创建有效的文件,但CSV是现成的)。

通过签名的cmdlet和脚本,可以获得额外的安全性, 组策略和执行策略有助于防止恶意代码在您的系统上运行,即使您以管理员身份运行它们。

关于执行什么命令——Richard的回答列出了它们以及PowerShell已经能够模拟它们的功能。

关于PowerShell是否强大到可以保证切换-这更多的是个人偏好的问题,尽管越来越多的Windows服务提供PowerShell cmdlet来控制它们,不使用这些服务的PowerShell被认为是一个障碍。(Hyper-V服务器是主要的这种服务,它还提供了使用PowerShell cmdlet比使用GUI做更多事情的能力!)

也许这个答案晚了五年,但是,如果有人在Windows上执行管理任务或各种东西的一般脚本,他们肯定应该尝试利用PowerShell来达到他们的目的。

如果你喜欢shell脚本,你一定会爱上PowerShell!

从微软命令Shell (Ars Technica)的导游之旅开始。