Является ли Windows PowerShell такой же мощной, как терминал Unix / Linux? [закрыто]

45

Является ли Windows PowerShell такой же мощной и эффективной, как Linux terminal?

Люди в автономном режиме говорят мне, не объясняя особо, что Windows PowerShell - это попытка заставить администраторов Unix чувствовать себя более комфортно при использовании Windows. Но, думаю, они будут удобны, только если будут иметь (или почти) одинаковую эффективность.

деревенщина
источник
3
Сложно ответить, потому что нет Linux-оболочки ЭТО. Есть много оболочек, обычно используемых в Linux (или вообще * nix системах). Наиболее часто используемым является bash, так что вы можете спросить об этом. <br> Также «мощный» очень основан на мнениях.
Kritzefitz
8
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.Эти люди не использовали ни Unix, ни Powershell.
Surfasb
Я бы сказал, что PowerShell - это подтверждение от некоторых областей Microsoft, что они испортили отсутствие мощной оболочки. Однако это вовсе не копирует стиль UNIX. Зная PS, вы действительно хорошо понимаете, как работает Windows и как работает .NET.
Джулиан Найт
Кстати, у Microsoft действительно была доступна оболочка BASH, которая была частью набора инструментов для миграции, который должен помочь людям перейти с UNIX на Windows Server.
Джулиан Найт
1
Я давний фанат Unix, который в большинстве своем предпочитает Unix Windows; тем не менее, PowerShell превосходит все ожидания, потому что одни объекты передаются с парами ключ / значение, а не с чистым текстом. Это делает его более похожим по дизайну на jQuery, чем на bash.
Марио

Ответы:

56

Итак, ваша первая проблема заключается в том, что вы сравниваете оболочку (PowerShell) с терминалом. В Linux терминал - это то, что отправляет и получает символьный ввод / вывод, и предполагается, что за ним стоит интерактивный пользователь (иными словами, это приложение с графическим интерфейсом, используемое для хранения оболочки). Одним из наиболее распространенных оболочек, запускаемых в Терминале Ubuntu, является Bash , но есть и другие.

Люди в автономном режиме говорят мне, не объясняя особо, что Windows PowerShell - это попытка заставить администраторов Unix чувствовать себя более комфортно при использовании Windows.

Действительно, правильно сказать, что PowerShell - это Windows, представляющая большую часть объектной модели WMI , COM и .NET в интерактивной среде сценариев с поддержкой сценариев, и что эта среда командной строки по-прежнему заимствует многие концепции, такие как конвейеры. и перенаправление ввода / вывода - из оболочек Unix, так же, как старый DOS (2.0 и выше) command.comи cmd.exeсделал. Конвейеры работают с объектами в PowerShell. Вы можете делать такие вещи, как создание HTML и, возможно, таблиц Excel на лету, если вы знали достаточно. Это, безусловно, обновление / замена старой cmd.exeоболочки, которая мало изменилась по сравнению с Windows NT 4.0 .

Что касается синтаксиса, он меньше похож на оболочки Unix (хотя, наконец, ни один из командлетов не используется /в качестве переключателя или индикатора параметров), но существует много псевдонимов для классических команд Unix - например, ввод lsв окне PowerShell будет работать аналогично dir. Но это просто псевдонимы («Get-Alias» перечисляет их?).

Что касается возможностей PowerShell, у вас действительно были аналогичные возможности, только в сценариях, из VBScript и CScript - хотя оба они предшествовали .NET.

Единственное, что Unix люди не должны делать при использовании Bash большую часть времени, - это быть близко знакомыми с, возможно, очень сложной объектной моделью программиста или объекта, которая требуется для многих сложных и простых задач PowerShell. Но это возможно только потому, что существует четкое соглашение о прямом выводе текста для многих стандартных команд POSIX . В Windows не было этой традиции - казалось, что вы предпочитаете использовать mmcконсоль для задач администрирования, с командами, добавляемыми здесь и там на протяжении многих лет. Кроме того, многие хорошо известные утилиты Unix сложны и требуют некоторых исследований перед использованием - rsync, wgetи многих других. Эффективность, вероятно, зависит от того, насколько хорошо известно, какой инструмент они используют, больше всего на свете.

LawrenceC
источник
8
+1 за упоминание о том, что PowerShell предоставляет .NET консоли и хосту сценариев. Он раскрывает возможности многих ключевых библиотек Windows для использования в сценариях. Варианты использования между двумя могут быть похожими, стиль совершенно другой.
Джулиан Найт
3
+1 за упоминание, что терминал содержит оболочку. Я долгое время пользовался Windows и Linux, но никто никогда не говорил так ясно о разнице.
Тайлер Коллиер
26

Windows PowerShell и Unix shell - это две разные вещи с преимуществами в обоих.

Unix (оболочка) имеет философию, что все является файлом. Вход и выход команды Unix могут быть доступны как файл. Это делает команду сцепления действительно простой, а повторное использование вывода одной команды другой - мощь оболочки Unix.

С Windows PowerShell, насколько я знаю, все является объектом. Вы можете передать результат команды другому как объект. Это может быть действительно мощным, но у него нет простой концепции Unix.

Я не верю, что PowerShell столь же эффективен, как оболочка Unix, но другие считают, что это так.

Но сравнение является спорным, потому что Windows не является системой * nix, поэтому понятия * nix не применяются. По сравнению с MS-DOS PowerShell - это большое улучшение.

Biapy
источник
4
Все, что является файлом, не имеет ничего общего с оболочкой, это ядро.
Тердон
3
Да, но это влияет на то, как устроена оболочка Unix.
Биапи
@terdon: Это верно, но оболочка прекрасно с этим работает. Потому что это все еще оболочка, которая распознает символы, такие как |, <или >.
Kritzefitz
1
Люди продолжают говорить об этих объектах в PowerShell. Привыкнув к cmd.exe и bash (или другим оболочкам), вы можете уточнить, возможно, на простом примере?
Люк
5
Не отсылая вас от этой страницы - когда вы переносите вещи в * nix-системах с правой стороны канала, вы ожидаете простой текст, например --- history | grep cp --- вернет только те строки, которые содержат cp. С другой стороны, при конвейерной обработке вещей в PS с правой стороны вы получаете объект со свойствами, такими как это --- Get-History | Where-Object {$ _. CommandLine -eq "cp"} --- $ _ - это каждый объект, CommandLine - это свойство, -eq равно и, наконец, строка cp.
Неизвестно