Є Windows PowerShell настільки потужним, як термінал Unix / Linux? [зачинено]


45

Є Windows PowerShell настільки потужним та ефективним, як Linux ' terminal?

Люди в режимі офлайн кажуть мені, не пояснюючи багато, що Windows PowerShell - це спроба зробити адміністраторів Unix більш комфортними за допомогою Windows. Але я здогадуюсь, вони будуть комфортнішими лише в тому випадку, якщо він матиме (або майже) однакову ефективність.


3
На це важко відповісти, тому що немає ТАКОЇ оболонки Linux. Існує багато оболонок, які зазвичай використовуються в Linux (або взагалі * nix системах). Найчастіше використовується баш, тому ви можете запитати про це. <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 в інтерактивному та сценарійному середовищі командного рядка - і що це середовище командного рядка продовжує запозичувати багато понять - наприклад, трубопроводи і I / O перенаправлення - від 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і багатьох інших. Ефективність - це, мабуть, функція того, наскільки добре ви знаєте той інструмент, який використовують більше, ніж усе інше.


8
+1 за те, що PowerShell виставляє .NET на консоль і як хост сценаріїв. Це розкриває потужність багатьох ключових бібліотек Windows, які використовуються в сценаріях. Випадки використання між ними можуть бути схожими, стиль зовсім інший.
Джуліан Найт

3
+1 для згадки про те, що термінал містить оболонку. Я довго використовував Windows та Linux, але ніколи не було так чітко заявляти про різницю.
Тайлер Колліє

26

Windows PowerShell і оболонка Unix - це дві різні речі, які мають переваги в обох.

У Unix (shell) є філософія, що все - це файл. Вхід та вихід команди Unix можна отримати як файл. Це робить командування ланцюга дійсно простим, а повторне використання результатів однієї команди іншою - це сила оболонки Unix.

З Windows PowerShell, наскільки я знаю, все є об’єктом. Ви можете передати результат команди іншому як об’єкт. Це може бути справді потужним, але воно не має простої концепції Unix.

Я не вірю, що PowerShell настільки ж ефективний, як оболонка Unix, але інші вважають, що це так.

Але порівняння є суперечливим, оскільки Windows не є * nix системою, тому поняття * nix не застосовуються. Порівняно з MS-DOS , PowerShell - це велике вдосконалення.


4
Все, що є файлом, не має нічого спільного з оболонкою, це ядро.
тердон

3
Щоправда, але це впливає на те, як сконструйована оболонка Unix.
Biapy

@terdon: Так, але оболонка чудово працює з цим. Тому що це все ще оболонка, яка розпізнає символи типу |, <або >.
Kritzefitz

1
Люди продовжують говорити про ці об'єкти в оболонці. Використовуючи лише для cmd.exe та bash (або інших оболонок), чи можете ви детальніше пояснити, мабуть, простим прикладом?
Люк

5
Не відсилаючи вас з цієї сторінки - коли ви конфігуруєте речі в * nix системах з правого боку труби, ви очікуєте простого тексту, наприклад --- історії | grep cp --- поверне лише рядки, які містять cp. З іншого боку, конвеюючи речі в PS на правій стороні, ви отримуєте об'єкт із властивостями, як цей --- Get-History | Where-Object {$ _. CommandLine -eq "cp"} --- $ _ - кожен об'єкт, CommandLine - властивість, -eq дорівнює і, нарешті, рядок cp.
Невідомо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.