Ngôn ngữ kịch bản nào hữu ích trong Windows? [đóng cửa]


48

Ngôn ngữ kịch bản nào hữu ích cho tự động hóa Windows?


10
Tôi đã cho +1 vì tôi có thể thấy một câu hỏi thú vị ẩn đằng sau những gì bạn đã viết. Mặc dù vậy, tôi nghĩ rằng "chính" là một lựa chọn từ không may mà bạn nên chỉnh sửa để làm cho ít mơ hồ hơn. Có lẽ "thường được sử dụng nhất", "được hỗ trợ tốt nhất" hoặc "được đề xuất", tùy thuộc vào ý của bạn. Chào mừng bạn đến với SuperUser! :)
Brennan Vincent

2
@Brennan Vincent: Đó là một gợi ý tuyệt vời, nhưng thay đổi từ "chính" vào thời điểm này có thể làm mất tinh thần của các câu trả lời. Tôi nghĩ rằng bình luận của bạn nói lên rất nhiều về vấn đề này, và rằng câu hỏi vẫn còn tốt hơn. (Nhân tiện, +1 cho bạn vì điều đó.)
Randolf Richardson

1
Hiện tại tôi nghĩ câu hỏi này rơi vào phạm trù chủ quan. Tuy nhiên với một chút sửa đổi từ ngữ như Brennan gợi ý tôi nghĩ rằng nó có thể là một mục wiki cộng đồng khá thú vị.
Joe Taylor

1
Có vẻ chủ quan với tôi, cũng. Đối với các ngôn ngữ kịch bản, "chính" hoặc "tốt nhất" hoặc "ưa thích" sẽ khác nhau dựa trên nhiệm vụ cụ thể được hoàn thành, và kỹ năng và kinh nghiệm của một cá nhân.
Iszi

3
Tôi lấy câu hỏi để có nghĩa là: những gì là nguồn gốc ngôn ngữ kịch bản cho Windows ngày nay ?, tức là, những gì ngôn ngữ kịch bản đã được xây dựng trong móc và chức năng vào hệ điều hành như trái ngược với các API đòi hỏi, ActiveX, vv để có được những điều thực hiện?
Synetech

Câu trả lời:


36
  1. PowerShell
  2. Máy chủ Windows Scripting
    a. VBScript
    b. JScript
  3. Tập tin hàng loạt

PowerShell (v2.0)

Kể từ Windows 7 và Server 2008, việc cân nhắc PowerShell là hợp lý với Windows và cũng là cơ bản để quản trị phần mềm máy chủ như Lync và Exchange vì có toàn bộ các lệnh có sẵn cho chúng. Có một danh sách ngày càng nhiều các tính năng có sẵn, xem Trung tâm tập lệnh để biết chi tiết.

Máy chủ Windows Scripting

Windows Script Host (WSH) về mặt kỹ thuật là máy chủ lưu trữ kịch bản cho Công cụ tạo tập lệnh ActiveX. VBScript và JScript (triển khai JavaScript của Microsoft) là hai công cụ được cài đặt theo mặc định. Nhiều cái khác có sẵn như là nguồn mở, bao gồm Perl, PHP và Ruby.

VBScript

Sử dụng cú pháp tương tự VB6 và VB.NET, VBScripts thiếu quyền truy cập dễ dàng vào các lớp .NET (Powershell được viết trên .NET để nó có quyền truy cập vào tất cả các chức năng .NET). VBScript chủ yếu tận dụng dịch vụ WMI và các đối tượng mà nó phơi bày.

Ví dụ: Điều này tạo ra một điểm Khôi phục.

Set wmi, whatName, errResults
wmi = GetObject("winmgmts:\\.\root\default:Systemrestore")
whatName = InputBox("Enter a name for the Restore Point",WScript.ScriptName)
errResults = wmi.CreateRestorePoint (whatName, 12, 100)
If errResults <> 0 then
    Wscript.Echo "Error " & errResults & " : Unable to create Restore Point"
End If

JScript

Bạn cũng có thể viết cùng một tập lệnh bằng ECMAScript:

var wmi = WScript.GetObject("winmgmts:\\.\root\default:Systemrestore");
var whatName = WSHInputBox("Enter a name for the Restore Point",Script.ScriptName);
var errResults = wmi.CreateRestorePoint(whatName, 12, 100);
if(errResults != 0) {
    WScript.Echo("Error "+ err + " : Unable to create Restore Point");
}

Tập tin lệnh hàng loạt

Tất nhiên là có Batch File tốt. Họ không cần giới thiệu.


7
Đối với Windows 7 và Server 2008, nó sẽ là Powershell 2.0
sshow

@sshow đồng ý về việc cụ thể về 2.0
Nick Josevski

"Họ không cần giới thiệu." Nhưng làm cần một extro ...
glenn Jackman

16

Tôi vẫn viết các tệp bó DOS, ngay cả trong Windows 7. Đối với hầu hết các tác vụ, thao tác này vẫn hoạt động khá tốt và hoạt động rất đơn giản (cũng vậy, nhiều lệnh DOS như "FOR" đã được cải thiện theo thời gian và cung cấp nhiều hơn tùy chọn và chức năng không có sẵn hơn một thập kỷ trước).

Đối với tôi, một tệp bó DOS vẫn là ngôn ngữ kịch bản chính cho Windows (chắc chắn là truyền thống), nhưng mọi người đều có nhu cầu và sở thích khác nhau. Có rất nhiều điều mà các tệp bó DOS không thể làm được (ngôn ngữ kịch bản cũng có thể gây ra các hạn chế) và trong những trường hợp hiếm hoi tôi gặp phải điều này, sau đó tôi xem xét các tùy chọn khác của mình là gì (thường là Perl, hoặc đôi khi có thể được viết một chương trình nhỏ hoặc toàn bộ ứng dụng).

Hiểu những gì bạn cần thực hiện là một bước rất quan trọng trong việc quyết định sử dụng công cụ nào. Làm quen với các công cụ là một khía cạnh quan trọng khác có thể giới hạn các tùy chọn của bạn. Nếu bạn đang cố gắng quyết định nên học ngôn ngữ [hoặc lập trình] nào, thì hy vọng điều này sẽ hữu ích cho bạn.


10
Nếu theo ngôn ngữ kịch bản "chính" mà bạn muốn nói là "lâu đời nhất và được sử dụng rộng rãi nhất" thì đây chắc chắn là câu trả lời đúng. Tuy nhiên, cmdthực sự là một điều quái dị, dễ dàng là ngôn ngữ kịch bản shell WORST mà tôi từng gặp điều không may khi sử dụng.
JSB

3
Tôi cũng sử dụng các tệp bó khi tập lệnh cần được sử dụng trên các phiên bản Windows khác. Nếu bạn chỉ giao dịch với Win7 / Server 2008 thì PowerShell là cách tốt nhất.
jtreser

5
+1 Tôi biết MS muốn powershell là , nhưng bây giờ nếu bạn muốn gửi cho ai đó một đoạn script đang chạy "windows", bạn phải gửi cho họ một tệp bó DOS. PS là tuyệt vời cho các phiên bản nhất định của windows cho một số tác vụ nhất định và chúng tiêu tốn rất nhiều năng lượng, nhưng các tệp bó là phổ biến.
Alan Jackson

Tại một số công ty, ví dụ như ngân hàng mà tôi hiện đang làm việc, Chính sách thực thi ngăn các tập lệnh PS được thực thi. Vì vậy, tôi đang học hàng loạt để dịch các tập lệnh PS của tôi. Vì vậy, có một số tình huống vẫn cần Batch ...
T_D

Tôi đã đồng ý với câu trả lời của bạn vào năm 2011, nhưng với Windows 10 Creators Update, Microsoft đã biến PowerShell thành mặc định khi nhấn Win + X, gõ 'cmd' trong Menu Bắt đầu và giữ Ctrl khi nhấp chuột phải vào Explorer. Vì vậy, bây giờ tôi coi Powershell là ngôn ngữ kịch bản mặc định cho Windows, kể từ Windows 10 Creators Update và BAT / CMD.
Jonas

10

Điều đó phụ thuộc vào người bạn hỏi. Một số sẽ không bao giờ rời khỏi lô, một số tình yêu vbscript một số tình yêu sức mạnh, những người khác như AutoIt. Sau đó, có những nền tảng độc lập như Python và Perl mà một số người sẽ thề với mọi thứ.


2
+1 để đề cập đến các ngôn ngữ kịch bản đa nền tảng (Perl là sở thích của tôi và tôi biết rằng Python cũng đã trở nên phổ biến trong những năm qua).
Randolf Richardson

2
+1 cho Perl. Nó rất hữu ích trên nhiều nền tảng và nó có một số mô-đun dành riêng cho Windows.
RedGrittyBrick

1
Tôi sẽ nói thêm rằng TinyPerl là một cách rất hữu ích để nhúng tập lệnh Perl đơn giản với không quá nhiều phụ thuộc. Nó sẽ biên dịch thành một tệp EXE nhỏ trên Windows. tinyperl.sourceforge.net
Benoit

4

Tôi cho rằng ngôn ngữ kịch bản chính thức của Wap cho Windows sẽ là (và đã có từ Win95) Windows Script Host .

Về mặt kỹ thuật, WSH không phải là một ngôn ngữ cho chính nó, mà là một môi trường (không phải GUI) phơi bày các giao diện COM để cho phép bạn sử dụng (hầu như) bất kỳ ngôn ngữ kịch bản nào bạn muốn, để thực hiện các điều hành OS, ngay cả những thứ không có cách riêng được tích hợp vào ngôn ngữ (ví dụ: Ruby không có cách tích hợp để đăng nhập vào Windows hoặc TCL / TK không có cách tích hợp để hiển thị hộp thoại Run).

Bạn có thể đã thấy một số tệp WSF có thể bao gồm nhiều ngôn ngữ trong một tệp, nhưng thông thường các tập lệnh WSH được viết bằng một ngôn ngữ và được phân phối với phần mở rộng tương ứng với phiên bản tập lệnh của ngôn ngữ đó (ví dụ: VBS cho các tập lệnh VisualBasic, PYS cho PythonScript, v.v. .)


[rùng mình tăng cường], tôi đã từng viết nó. Bạn biết bạn có thể chạy các tập lệnh WSH tùy ý từ IE không? Không phải là lạ. Rất vui khi họ mở rất nhiều api của họ lên web. (Từ chối trách nhiệm, sự hoài nghi này có niên đại bởi XP-SP3)
ThorSummoner

Câu chuyện về WSH và IE thực sự không đơn giản: msdn.microsoft.com/en-us/l Library / bb250473 ( v = vs85) .aspx (chỉ là một ví dụ về các hạn chế, tùy thuộc vào vùng bảo mật) Và IE 11 không thậm chí còn hỗ trợ VBScript nữa, ngoài chế độ cũ. Đừng dựa vào IE để thực thi các tập lệnh WSH.
Jonas

4

Tôi sẽ nói AutoIt, nó cung cấp sự phát triển rất nhanh và dễ dàng trên các cửa sổ và rất chặt chẽ cùng với nó. Điều này có nghĩa là các tác vụ thường lấy khá nhiều mã trong các ngôn ngữ khác có thể được thực hiện theo đúng nghĩa đen một dòng trong tự động. Các tính năng như biên dịch trực tiếp vào exe cũng rất hữu ích.


Giống như monoceres, tôi sử dụng AutoIt . Nó cực kỳ linh hoạt cho các khái niệm thử nghiệm và tạo mẫu nhanh trong vài phút. Trong đó, nó được thiết kế để tự động hóa, đó là điều tôi thấy rất nhiều người sử dụng Powershell. Hãy dùng thử :)
James

1
AutoIt khá thú vị, đặc biệt là đối với các chức năng UI (hoạt động như người dùng gõ vào hộp thoại, nhấn nút, v.v.) nhưng sẽ là một sự kéo dài thực sự để gọi bằng ngôn ngữ kịch bản Windoze "chính". Ngày nay, hầu hết các đồng nghiệp của tôi (trong một nhóm gồm hơn 20 Quản trị viên Windows) thậm chí chưa từng nghe về nó.
ewall

2

Các ngôn ngữ khác được chỉ ra trong câu hỏi này (VbScript, PowerShell, Batch) rất phổ biến và được hỗ trợ. Nếu bạn đã biết một ngôn ngữ kịch bản và cảm thấy thoải mái với - bằng mọi cách hãy đi với điều đó.

Nếu bạn chuẩn bị đầu tư để chọn một ngôn ngữ mới, tôi sẽ đề xuất hai ngôn ngữ cho bạn, tùy thuộc vào công việc bạn đang cố gắng thực hiện:

JavaScript (thông qua WSH) - sử dụng JavaScript nếu bạn muốn sử dụng nhiều Đối tượng tự động hóa khác nhau bằng cách khởi tạo chúng và gọi vào Mô hình đối tượng của chúng. Bạn có thể tạo Đối tượng tự động hóa cho hầu hết mọi thứ, từ máy chủ Exchange đến WMI đến tài liệu Office. Có một hỗ trợ gỡ lỗi với Visual Studio (với đối số / x). Ngoài ra, một khoản đầu tư vào JavaScript sẽ chứng minh là hữu ích trong HTML.

Perl - sử dụng Perl nếu bạn có thể khởi chạy các chương trình khác, thao tác đầu ra của chúng, thực hiện biểu thức chính quy. Mặc dù có vẻ như ngôn ngữ này hiện đang suy giảm, nhưng nó vẫn là một ngôn ngữ rất phổ biến, được hỗ trợ rất tốt với một ngôn ngữ cộng đồng lớn. Bạn cũng nên xem xét ngôn ngữ này để liên lạc với các dịch vụ khác (không nhất thiết phải là Windows), chẳng hạn như JIRA trên doanh nghiệp hoặc EC2 trên Amazon. Gỡ lỗi được hỗ trợ trong nhật thực với EPIC, đây cũng là một môi trường IDE tốt (tô màu cú pháp, v.v.). Có các mô-đun trong CPAN cho tất cả mọi thứ. Kiến thức Perl sẽ chứng minh là hữu ích khi phải tự động hóa trên các máy không chạy Windows.


1
Python là một thay thế rất tốt cho perl, mặc dù những thứ bạn sử dụng cho cả hai khá giống nhau
Phoshi

1

Trong những ngày đầu, có VBScript theo sau là Batch, trong môi trường công ty với Windows 7 và Server 2008 R2 thuần túy, ngôn ngữ kịch bản mới Powershell đang thu hút nhiều sự chú ý.


Bạn dường như đang thể hiện một mong muốn sâu sắc để PowerShell tiếp quản. Sẽ công bằng khi cho rằng bạn "muốn nó là" PowerShell? ;-D
Randolf Richardson

Tôi có quyền hạn trên vbscript có.
EKS

1

Tôi thứ hai đề xuất cho Perl, nếu bạn định viết một số tập lệnh Perl. Những người tôi làm việc cùng đã sử dụng thành công và đề xuất CLR Script (hơi cũ) và để tạo kịch bản tương tác web, iMacros


1

Nó có thể là hầu hết mọi thứ, tùy thuộc vào những gì bạn cố gắng tự động hóa. Nó sẽ thay đổi từ các tệp bó và PowerShell sang autohotkey và Selenium (nếu bạn cần tự động hóa một số tác vụ liên quan đến GUI).

Thông thường nó không phải là một vấn đề để tìm hiểu một, nếu bạn cần thêm một số sửa đổi hoặc hỗ trợ các tập lệnh đã được viết. Nếu bạn cần phát triển một cái gì đó mới - chọn ngôn ngữ / cách dựa trên yêu cầu và những gì bạn đã 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.