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

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

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

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

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


当前回答

为什么不两者都用呢?在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来达到他们的目的。

TL;DR——我不讨厌Windows或PowerShell。我在Windows或PowerShell上什么都做不了。


我个人仍然觉得PowerShell充其量只能说是平淡无奇。

tab completion of directory paths do not compound, requiring the user to enter a path separator after every name completion. I still feel like Windows doesn't even have the concept of a path or of what a path is, with no accessible user home indicator ~/ short of some @environment://somejibberish/%user_home% NTFS is still a mess and seemingly always will be. Good luck navigating. cmd-esque interface, The dinosaur cmd.exe is still visible in PowerShell, Edit → Mark still being the only way to copy information, and copying only in the form of rectangular blocks of visible terminal space. and Edit → Mark still being the only way to paste strings into the terminal. Painting it blue doesn't make it any more attractive. I don't mind Microsoft developers having a taste in color though. Windows always opens at top left corner of screen. For somebody who uses vertical task bars this is incredibly annoying, especially considering that the Windows task bar will cover the only corner of the window that gives access to copy/paste functionality.

关于Windows包含的工具,我不能说太多。由于有一整套开源的、免费授权的CLI工具,而且PowerShell附带了这些工具,据我所知,没有一个是完全令人失望的。

PowerShell的wget的参数似乎与GNU的wget无法相比。谢谢,希望之光便携无用。 PowerShell POSIX与bash不兼容,特别是&&运算符没有被处理,使得最简单的条件命令也不能跟在后面。

我不了解人类;我试过了,真的;我仍然试着给它一个机会,希望下次我打开它的时候,它不会那么无用。我不能在PowerShell中做任何事情,我也几乎不能在真正的项目中将GNU工具引入Windows。

MySysGit为我提供了带有几个GNU工具的陈旧cmd.exe提示符,它仍然非常令人印象深刻,但最终路径补全工作了。Git命令将在Git Bash中运行。

Mintty for MySysGit为MySysGit的环境提供了Cygwin界面,使复制和粘贴一个东西(选择复制(鼠标),Shift+Ins粘贴,多么现代…)然而,像git push这样的东西在Mintty中被破坏了。

我并不是要抱怨,但我仍然看到Windows上命令行可用性的巨大问题,即使使用了Cygwin这样的工具。


注:仅仅因为在PowerShell中可以做一些事情,并不意味着它就可用。可用性比能力更重要,这也是我作为消费者在使用产品时所关注的问题。

无论如何,我都不是一个非常有经验的PowerShell用户,但是我接触到的一点点PowerShell给我留下了深刻的印象。您可以将内置的cmdlet链接在一起,以完成您在Unix提示符下可以完成的任何事情,并且还有一些额外的优点,用于执行诸如导出到CSV、HTML表以及更深入的系统管理类型的作业。

如果你真的需要像sed这样的东西,总有UnixUtils或GnuWin32,你可以很容易地与PowerShell集成。

作为一个长期的Unix用户,我在习惯命令命名方案时遇到了一些麻烦,如果我了解更多的。net,我肯定会从中受益更多。

所以本质上,我认为如果windows独有的特性不构成问题,它是非常值得学习的。

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

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

效果很好。

我已经使用了一些PowerShell来实现脚本自动化。虽然环境看起来比Unix shell考虑得更周到,但实际上使用对象而不是文本流要笨拙得多,而且过去30年开发的许多Unix设施仍然缺失。

Cygwin仍然是我在Windows主机上选择的脚本环境。在完成任务方面,它肯定胜过其他选择。