Windows PowerShell có mạnh như thiết bị đầu cuối của Unix / Linux không? [đóng cửa]


44

Windows PowerShell có mạnh mẽ và hiệu quả như Linux terminalkhông?

Mọi người ngoại tuyến nói với tôi, mà không giải thích nhiều, rằng Windows PowerShell là một nỗ lực để làm cho các quản trị viên Unix cảm thấy thoải mái hơn khi sử dụng Windows. Nhưng tôi đoán, họ sẽ chỉ thoải mái nếu nó có (hoặc gần như) hiệu quả tương tự.


3
Điều đó thật khó trả lời, vì không có THAT Linux. Có nhiều shell thường được sử dụng trên Linux (hoặc nói chung là * nix system). Cái được sử dụng nhiều nhất là bash, vì vậy bạn có thể muốn hỏi về điều đó. <br> Ngoài ra "mạnh mẽ" là rất dựa trên quan điểm.
Kritzefitz

7
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.Những người này đã không sử dụng Unix hoặc Powershell.
Surfasb

Tôi muốn nói rằng PowerShell là một sự thừa nhận từ một số khu vực của Microsoft rằng họ đã gây rối bằng cách không có lớp vỏ mạnh mẽ. Tuy nhiên, nó hoàn toàn không sao chép phong cách của UNIX. Để biết PS, bạn thực sự làm tốt để hiểu một chút về cách Windows hoạt động và cách .NET hoạt động.
Julian Knight

BTW, Microsoft đã có sẵn vỏ BASH, một phần của bộ công cụ di chuyển được cho là để giúp mọi người chuyển từ UNIX sang Windows Server.
Julian Knight

1
Tôi là một fanboy Unix lâu năm, người thích Unix hơn Windows ở hầu hết các khía cạnh; tuy nhiên, PowerShell đánh bại bash tay vì một đối tượng ống có cặp khóa / giá trị và không phải là văn bản thuần túy. Điều này làm cho nó có thiết kế tương tự với jQuery hơn là bash.
Mario

Câu trả lời:


55

Chà, vấn đề đầu tiên của bạn là bạn đang so sánh một trình bao (PowerShell) với một thiết bị đầu cuối. Trong Linux, thiết bị đầu cuối là thứ gửi và nhận I / O dựa trên ký tự và được giả sử là có người dùng tương tác đằng sau nó (nói cách khác, đó là ứng dụng GUI được sử dụng để chứa vỏ). Một trong những shell phổ biến nhất chạy trong Terminal của Ubuntu là Bash , nhưng có những cái khác.

Mọi người ngoại tuyến nói với tôi, mà không giải thích nhiều, rằng Windows PowerShell là một nỗ lực để làm cho các quản trị viên Unix cảm thấy thoải mái hơn khi sử dụng Windows.

Thực sự, điều chính xác để nói là PowerShell là Windows phơi bày phần lớn mô hình đối tượng WMI , COM.NET trong môi trường dòng lệnh tương tác và có thể viết kịch bản - và môi trường dòng lệnh này tiếp tục mượn nhiều khái niệm - chẳng hạn như đường ống và chuyển hướng I / O - từ hệ vỏ Unix, giống như DOS cũ (2.0 trở lên) command.comcmd.exeđã làm. Đường ống làm việc với các đối tượng trong PowerShell. Bạn có thể thực hiện những việc như tạo HTML và có thể là bảng tính Excel một cách nhanh chóng nếu bạn biết đủ. Đây chắc chắn là một bản nâng cấp / thay thế từ cmd.exevỏ cũ không thay đổi nhiều so với Windows NT 4.0 .

Về cú pháp, nó giống như các shell Unix (mặc dù cuối cùng không có lệnh ghép ngắn nào sử dụng /làm chỉ báo chuyển đổi hoặc tham số), nhưng có nhiều bí danh cho các lệnh Unix cổ điển - chẳng hạn như nhập vào lscửa sổ PowerShell sẽ hoạt động như thế nào dir. Nhưng đây chỉ là bí danh ("Get-Alias" liệt kê những thứ này?).

Về khả năng của PowerShell, bạn thực sự có khả năng tương tự, theo kiểu chỉ có kịch bản, từ VBScriptCScript - mặc dù cả hai đều có trước .NET.

Một điều mà mọi người Unix không phải làm khi sử dụng Bash hầu hết thời gian là phải làm quen với mô hình đối tượng rất phức tạp của một lập trình viên hoặc đối tượng, vốn được yêu cầu cho nhiều tác vụ PowerShell đơn giản và tiên tiến. Nhưng điều này chỉ có thể bởi vì có một quy ước rõ ràng về đầu ra văn bản thẳng cho nhiều lệnh POSIX tiêu chuẩn . Windows không có truyền thống này - dường như bạn thích sử dụng mmcbảng điều khiển cho các tác vụ quản trị, với các lệnh được thêm vào đây và ở đó trong nhiều năm. Hơn nữa, nhiều tiện ích Unix nổi tiếng là phức tạp và đòi hỏi một số nghiên cứu trước khi sử dụng - rsync, wget, và nhiều người khác. Hiệu quả có lẽ là một chức năng làm thế nào người ta biết rõ công cụ họ đang sử dụng hơn bất kỳ thứ gì khác.


8
+1 để đề cập rằng PowerShell hiển thị .NET cho bảng điều khiển & dưới dạng máy chủ lưu trữ tập lệnh. Nó cho thấy sức mạnh của nhiều thư viện Windows chính được sử dụng trong kịch bản. Các trường hợp sử dụng giữa hai có thể giống nhau, phong cách hoàn toàn khác nhau.
Julian Knight

3
+1 để đề cập rằng một thiết bị đầu cuối có vỏ. Tôi đã sử dụng Windows và Linux trong một thời gian dài nhưng chưa bao giờ có ai nói rõ sự khác biệt này.
Tyler Collier

25

Windows PowerShell và Unix shell là hai thứ khác nhau với lợi thế ở cả hai.

Unix (shell) có một triết lý rằng mọi thứ đều là một tập tin. Đầu vào và đầu ra của lệnh Unix có thể được truy cập như một tệp. Điều này làm cho lệnh xích thực sự đơn giản và sử dụng lại đầu ra của một lệnh này bằng sức mạnh của vỏ Unix.

Với Windows PowerShell, theo như tôi biết, mọi thứ đều là một đối tượng. Bạn có thể truyền kết quả của lệnh cho người khác dưới dạng đối tượng. Điều này có thể thực sự mạnh mẽ, nhưng nó không có khái niệm đơn giản về Unix.

Tôi không tin rằng PowerShell hiệu quả như shell Unix, nhưng những người khác tin rằng nó là như vậy.

Nhưng sự so sánh là không cần thiết, vì Windows không phải là một hệ thống * nix, do đó, các khái niệm * nix không được áp dụng. So với MS-DOS , PowerShell là một cải tiến tuyệt vời.


4
Tất cả mọi thứ là một tập tin không có gì để làm với shell, nó là một điều kernel.
terdon

3
Đúng, nhưng nó ảnh hưởng đến cách thiết kế vỏ unix.
Biapy

@terdon: Đúng vậy, nhưng cái vỏ hoạt động độc đáo với cái này. Bởi vì nó vẫn là cái vỏ nhận ra các biểu tượng như |, <hoặc >.
Kritzefitz

1
Mọi người cứ nói về những đồ vật này trong powershell. Chỉ được sử dụng để cmd.exe và bash (hoặc các shell khác), bạn có thể giải thích, có thể với một ví dụ đơn giản không?
Luc

5
Không gửi bạn ra khỏi trang này - khi bạn sắp xếp mọi thứ trong các hệ thống * nix ở bên phải của đường ống, bạn mong đợi văn bản đơn giản, ví dụ --- history | grep cp --- sẽ chỉ trả về các dòng có chứa cp. Mặt khác, khi sắp xếp các thứ trong PS ở phía bên phải, bạn sẽ có được một đối tượng, với các thuộc tính, như thế này --- Get-History | Where-Object {$ _. CommandLine -eq "cp"} --- $ _ là mỗi đối tượng, CommandLine là thuộc tính, -eq bằng và cuối cùng là chuỗi cp.
Không biết
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.