Windows PowerShell是否与Unix / Linux终端一样强大?[关闭]


44

Windows PowerShell是否与Linux一样强大和高效terminal

离线用户告诉我,Windows PowerShell是一种使Unix管理员对使用Windows更加自在的尝试,但并没有做太多解释。但是我想,只有效率相同(或几乎相同)时,他们才会感到舒适。


3
很难回答,因为没有那个Linux shell。Linux(或通常为* nix系统)上通常使用许多shell。最常用的是bash,因此您可能要问一下。<br>“功能强大”也是基于意见的。
Kritzefitz

7
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.这些人都没有使用过Unix或Powershell。
surfasb 2014年

我要说,PowerShell是Microsoft某些领域的认可,因为他们没有可用的强大外壳而搞砸了。但是,它根本不会复制UNIX的样式。要了解PS,您确实会很好地了解Windows的工作方式以及.NET的工作方式。
朱利安·奈特

顺便说一句,微软确实有一个BASH shell可用,它是迁移工具箱的一部分,可以帮助人们从UNIX迁移到Windows Server。
朱利安·奈特

1
我是一个长期的Unix迷,在很多方面都喜欢Unix,而不是Windows。但是,PowerShell击败了bash,因为其中一个管道对象具有键/值对而不是纯文本。这使得它在设计上与jQuery相似,而与bash相似。
Mario

Answers:


55

好吧,您的第一个问题是您正在将外壳(PowerShell)与终端进行比较。在Linux中,终端是一种用于发送和接收基于字符的I / O的终端,它假定在其后方具有交互式用户(换句话说,它是用于包含 Shell 的GUI应用程序)。 Ubuntu终端中运行的最常见的shell之一是Bash,但还有其他一些。

离线用户告诉我,Windows PowerShell是一种使Unix管理员对使用Windows更加自在的尝试,但并没有做太多解释。

确实,正确的说法是PowerShell是Windows 在交互式且可编写脚本的命令行环境中公开了许多WMICOM.NET对象模型-并且此命令行环境继续借鉴了许多概念-例如管道和I / O重定向-从Unix外壳,就像老的DOS(2.0及以上)command.com,并cmd.exe做了。管道可在PowerShell中与对象一起使用。如果您了解足够的信息,则可以即时创建HTML,甚至可以创建Excel电子表格。当然,这是对旧cmd.exe外壳的升级/替换,它与Windows NT 4.0相比并没有太大变化。

关于语法,它不太像Unix shell(尽管最终这些cmdlet都不/用作开关或参数指示符),但是经典Unix命令有很多别名-例如ls在PowerShell窗口中输入将类似于dir。但是这些仅仅是别名(“ Get-Alias”列出了这些吗?)。

关于PowerShell的功能,您确实具有VBScriptCScript的类似功能(仅脚本编写),尽管这两个功能都早于.NET。

Unix的人在大多数时间使用Bash时不必做的一件事就是要熟悉程序员或对象可能非常复杂的对象模型,这是许多高级和简单的PowerShell任务所必需的。但这仅是可能的,因为对于许多标准POSIX命令,纯文本输出都有明确的约定。Windows没有这种传统-似乎更喜欢您使用mmc控制台来执行管理任务,并且多年来在此添加命令。此外,许多著名的Unix工具非常复杂,需要在使用前一些研究- rsyncwget和许多其他。效率可能取决于人们对他们正在使用的工具的了解程度之多。


8
+1表示PowerShell将.NET公开给控制台并作为脚本宿主。它展示了脚本编写中将使用的许多关键Windows库的强大功能。两者之间的用例可能相似,样式完全不同。
朱利安·奈特

3
+1表示终端包含外壳。我已经使用Windows和Linux很长时间了,但是从来没有人这么清楚地指出它们之间的区别。
Tyler Collier 2014年

25

Windows PowerShell和Unix Shell是两种不同的东西,两者都有优势。

Unix(shell)的哲学是一切都是文件。Unix命令的输入和输出可以像文件一样进行访问。这使得链接命令非常简单,而Unix shell的功能就是重用一个命令的输出。

就Windows PowerShell而言,据我所知,一切都是对象。您可以将命令的结果作为对象传递给另一个。这确实很强大,但是没有Unix的简单概念。

我不认为PowerShell可以像Unix Shell一样高效,但是其他人则相信它是有效的。

但是比较是没有意义的,因为Windows不是* nix系统,因此* nix概念不适用。与MS-DOS相比,PowerShell是一个很大的改进。


4
一切都是与外壳无关的文件,它是内核。
2014年

3
是的,但这会影响unix shell的设计方式。
Biapy 2014年

@terdon:是的,但是外壳与此很好地配合。因为它仍然是识别符号一样的贝壳|<>
Kritzefitz

1
人们在Powershell中不断谈论这些对象。仅用于cmd.exe和bash(或其他shell),您能否举例说明,也许举一个简单的例子?
2014年

5
无需使您离开此页面-在管道右侧的* nix系统中对管道进行流水处理时,您会期望使用简单的文本,例如--- history | grep cp ---将仅返回包含cp的行。另一方面,当在右侧对PS中的内容进行流水线处理时,您会得到一个具有属性的对象,例如--- Get-History | 其中-Object {$ _。CommandLine -eq“ cp”} --- $ _是每个对象,CommandLine是属性,-eq等于,最后是字符串cp。
未知
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.