Windows PowerShell 和 Unix/Linux 的终端一样强大吗?

ker*_*ern 50 linux terminal powershell

Windows PowerShell和 Linux 一样强大和高效terminal吗?

离线人员告诉我,Windows PowerShell 试图让 Unix 管理员在使用 Windows 时感觉更舒服,但没有做太多解释。但我想,只有当它具有(或几乎)相同的效率时,他们才会感到舒适。

Law*_*ceC 63

好吧,您的第一个问题是将 shell (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和许多其他。效率可能是一个人对他们正在使用的工具的了解程度的函数。

  • +1 提到 PowerShell 将 .NET 公开给控制台并作为脚本主机。它展示了许多用于脚本编写的关键 Windows 库的强大功能。两者之间的用例可能相似,风格完全不同。 (8认同)
  • +1 用于提及终端包含外壳。我使用 Windows 和 Linux 已经很长时间了,但从来没有人如此清楚地说明过区别。 (3认同)

Bia*_*apy 31

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

Unix (shell) 的哲学是一切都是文件。Unix 命令的输入和输出可以像文件一样访问。这使得链接命令变得非常简单,并且通过另一个命令重用一个命令的输出是 Unix shell 的强大功能。

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

我不相信 PowerShell 与 Unix shell 一样高效,但其他人认为它是。

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

  • 不会让您离开此页面 - 当您在管道右侧的 *nix 系统中进行管道传输时,您期望简单的文本,例如 --- history | grep cp --- 将只返回包含 cp 的行。另一方面,当在右侧的 PS 中流水线处理事物时,您会得到一个对象,具有这样的属性 --- Get-History | where-Object {$_.CommandLine -eq "cp"} --- $_ 是每个对象,CommandLine 是属性,-eq 等于最后是字符串 cp。 (8认同)
  • 一切都是文件与外壳无关,它是内核的东西。 (6认同)
  • 没错,但它会影响 unix shell 的设计方式。 (5认同)
  • 人们一直在 powershell 中谈论这些对象。仅习惯于 cmd.exe 和 bash(或其他 shell),您能否详细说明,也许举个简单的例子? (2认同)