Czy Windows PowerShell jest tak potężny jak terminal Unix / Linux? [Zamknięte]

45

Czy program Windows PowerShell jest tak wydajny i wydajny jak Linux terminal?

Ludzie offline mówią mi bez wyjaśnienia, że ​​Windows PowerShell jest próbą sprawienia, aby administratorzy systemu Unix czuli się bardziej komfortowo z systemem Windows. Sądzę jednak, że będą one wygodne tylko wtedy, gdy będą miały (lub prawie) taką samą wydajność.

kern
źródło
3
Trudno odpowiedzieć, ponieważ nie ma takiej powłoki Linux. Istnieje wiele powłok powszechnie używanych w systemie Linux (lub ogólnie w systemach * nix). Najczęściej używanym jest bash, więc możesz chcieć o to zapytać. <br> Również „potężny” jest bardzo oparty na opiniach.
Kritzefitz
8
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.Ci ludzie nie używali ani Uniksa, ani Powershell.
surfasb
Powiedziałbym, że PowerShell jest potwierdzeniem z niektórych obszarów Microsoftu, że zawiedli, nie mając dostępnej potężnej powłoki. Jednak wcale nie kopiuje stylu UNIX. Aby poznać PS, naprawdę dobrze jest zrozumieć trochę, jak działa Windows i jak działa .NET.
Julian Knight
BTW, Microsoft miał dostępną powłokę BASH, która była częścią zestawu narzędzi do migracji, który miał pomóc ludziom przejść z UNIX na Windows Server.
Julian Knight
1
Jestem wieloletnim fanboyem Uniksa, który pod wieloma względami woli Unixa od Windows; jednak PowerShell pokonuje bash, ponieważ jeden potokuje obiekty posiadające pary klucz / wartość, a nie czysty tekst. To sprawia, że ​​jest bardziej podobny do jQuery niż do bash.
Mario,

Odpowiedzi:

56

Twój pierwszy problem polega na tym, że porównujesz powłokę (PowerShell) z terminalem. W Linuksie terminal to coś, co wysyła i odbiera we / wy oparte na znakach i zakłada się, że stoi za nim interaktywny użytkownik (innymi słowy, jest to aplikacja GUI zawierająca powłokę). Jedną z najczęstszych powłok uruchomionych w Terminalu Ubuntu jest Bash , ale są też inne.

Ludzie offline mówią mi bez wyjaśnienia, że ​​Windows PowerShell jest próbą sprawienia, aby administratorzy systemu Unix czuli się bardziej komfortowo z systemem Windows.

Naprawdę prawdą jest, aby powiedzieć, że PowerShell to system Windows odsłaniający dużą część modelu obiektowego WMI , COM i .NET w interaktywnym i skryptowym środowisku wiersza poleceń - i że środowisko wiersza poleceń nadal pożycza wiele pojęć - takich jak potoki i przekierowanie I / O - z powłok uniksowych, podobnie jak stary DOS (2.0 i nowsze) command.comi cmd.exetak się stało. Rurociągi działają z obiektami w PowerShell. Możesz robić rzeczy takie jak tworzenie HTML i ewentualnie arkuszy kalkulacyjnych Excel w locie, jeśli wiesz wystarczająco dużo. Jest to z pewnością aktualizacja / wymiana ze starej cmd.exepowłoki, która niewiele się zmieniła od Windows NT 4.0 .

Jeśli chodzi o składnię, to mniej przypomina powłoki uniksowe (chociaż w końcu żadne z poleceń cmdlet nie używa /jako przełącznika lub wskaźnika parametru), ale istnieje wiele aliasów do klasycznych poleceń uniksowych - takich jak wejście lsw oknie programu PowerShell dir. Ale to tylko aliasy (lista „Get-Alias” je wymienia?).

Jeśli chodzi o możliwości programu PowerShell, naprawdę miałeś podobne możliwości, tylko w skryptach, z VBScript i CScript - chociaż oba z nich pochodzą wcześniej .NET.

Jedną rzeczą, której ludzie uniksowi nie muszą robić podczas korzystania z Basha przez większość czasu, jest dokładne zaznajomienie się z bardzo skomplikowanym modelem obiektowym programisty lub obiektu, który jest wymagany do wielu zaawansowanych i prostych zadań PowerShell. Jest to jednak możliwe tylko dlatego, że dla wielu standardowych poleceń POSIX istnieje wyraźna konwencja wyprowadzania zwykłego tekstu . Windows nie miał tej tradycji - wydawało się, że wolisz używać mmckonsoli do zadań administracyjnych, z poleceniami dodawanymi tu i tam przez lata. Ponadto, wiele znanych narzędzi systemu Unix są złożone i wymagają pewnego badania Przed rozpoczęciem użytkowania - rsync, wgeti wiele innych. Wydajność jest prawdopodobnie funkcją tego, jak dobrze się zna narzędzie, którego używa bardziej niż cokolwiek innego.

LawrenceC
źródło
8
+1 za wspomnienie, że PowerShell udostępnia platformę .NET konsoli i hostowi skryptów. To ujawnia moc wielu kluczowych bibliotek Windows do użycia w skryptach. Przypadki użycia między tymi dwoma mogą być podobne, styl jest zupełnie inny.
Julian Knight
3
+1 za wspomnienie, że terminal zawiera powłokę. Używam Windowsa i Linuksa od dłuższego czasu, ale nigdy nikt nie powiedział tak wyraźnie różnicy.
Tyler Collier
26

Windows PowerShell i powłoka Unix to dwie różne rzeczy, które mają zalety w obu.

Unix (shell) ma filozofię, że wszystko jest plikiem. Wejście i wyjście komendy Unix można uzyskać jak plik. To sprawia, że ​​łączenie poleceń jest naprawdę proste, a ponowne użycie wyjścia jednego polecenia przez drugie jest siłą powłoki Unix.

Z Windows PowerShell, o ile mi wiadomo, wszystko jest przedmiotem. Możesz przekazać wynik polecenia innemu jako obiekt. Może to być naprawdę potężne, ale nie ma prostej koncepcji Uniksa.

Nie wierzę, że PowerShell jest tak wydajny jak powłoka Unix, ale inni uważają, że tak jest.

Ale porównanie jest dyskusyjne, ponieważ Windows nie jest systemem * nix, dlatego pojęcia * nix nie mają zastosowania. W porównaniu do MS-DOS , PowerShell jest świetnym ulepszeniem.

Biapy
źródło
4
Wszystko to plik nie ma nic wspólnego z powłoką, to kwestia jądra.
terdon
3
To prawda, ale wpływa to na sposób projektowania powłoki uniksowej.
Biapy
@terdon: Zgadza się, ale powłoka działa z tym dobrze. Bo to nadal powłoka, która rozpoznaje symbole jak |, <lub >.
Kritzefitz
1
Ludzie mówią o tych obiektach w PowerShell. Będąc przyzwyczajonym tylko do cmd.exe i bash (lub innych powłok), możesz rozwinąć, być może z prostym przykładem?
Luc
5
Bez odsyłania Cię z tej strony - kiedy potokujesz rzeczy w systemach * nix po prawej stronie potoku, oczekujesz prostego tekstu, na przykład --- historia | grep cp --- zwróci tylko wiersze zawierające cp. Z drugiej strony, gdy potokujesz rzeczy w PS po prawej stronie, otrzymujesz obiekt o właściwościach takich jak ta --- Get-History | Gdzie-obiekt {$ _. CommandLine -eq "cp"} --- $ _ jest każdym obiektem, CommandLine jest właściwością, -eq jest równe i na końcu łańcuch cp.
Nieznany