ภาษาสคริปต์ใดที่มีประโยชน์ใน Windows [ปิด]


48

ภาษาสคริปต์ใดที่มีประโยชน์สำหรับระบบอัตโนมัติของ Windows


10
ฉันให้ +1 เพราะฉันเห็นคำถามที่น่าสนใจที่แฝงอยู่ในสิ่งที่คุณเขียน ฉันคิดว่า "main" เป็นตัวเลือกคำที่โชคร้ายที่คุณควรแก้ไขเพื่อให้คลุมเครือน้อยลง บางที "ใช้กันมากที่สุด", "ได้รับการสนับสนุนที่ดีที่สุด" หรือ "แนะนำ" ขึ้นอยู่กับความหมายของคุณ ยินดีต้อนรับสู่ SuperUser! :)
เบรนแนนวินเซนต์

2
@Brennan Vincent: นั่นเป็นคำแนะนำที่ดี แต่การเปลี่ยนคำว่า "main" ณ จุดนี้อาจเบี่ยงเบนความสนใจของคำตอบได้ ฉันคิดว่าความคิดเห็นของคุณพูดถึงปริมาณมากในเรื่องนี้และคำถามนั้นดีกว่าเดิม (+1 สำหรับคุณสำหรับเรื่องนี้โดยวิธีการ.)
Randolf Richardson

1
ในขณะที่ฉันคิดว่าคำถามนี้ตกอยู่ในประเภทส่วนตัว อย่างไรก็ตามด้วยการปรับเปลี่ยนถ้อยคำเล็กน้อยตามที่เบรนแนนแนะนำฉันคิดว่ามันน่าจะเป็นรายการวิกิชุมชนที่น่าสนใจ
Joe Taylor

1
ดูเป็นส่วนตัวกับฉันด้วย สำหรับภาษาสคริปต์ "หลัก" หรือ "ดีที่สุด" หรือ "ที่ต้องการ" จะแตกต่างกันไปตามงานที่ทำสำเร็จและทักษะและประสบการณ์ของแต่ละบุคคล
Iszi

3
ฉันใช้คำถามเพื่อหมายถึง: สิ่งที่เป็นพื้นเมืองภาษาสคริปต์สำหรับ Windows วันนี้ ?, คือสิ่งที่ภาษาสคริปต์ที่มีในตัวตะขอและฟังก์ชั่นเข้ามาในระบบปฏิบัติการเมื่อเทียบกับ APIs ที่กำหนด ActiveX, ฯลฯ เพื่อให้ได้รับสิ่งที่ทำ?
Synetech

คำตอบ:


36
  1. PowerShell
  2. หน้าต่างการเขียนสคริปต์โฮสต์
    VBScript
    b. JScript
  3. ไฟล์แบทช์

PowerShell (v2.0)

ตั้งแต่ Windows 7 และ Server 2008 มันสมเหตุสมผลที่จะพิจารณา PowerShell เมื่อมันมาพร้อมกับ Windows และยังเป็นพื้นฐานในการจัดการซอฟต์แวร์เซิร์ฟเวอร์เช่น Lync และ Exchange เนื่องจากมีชุดคำสั่งทั้งหมดที่ใช้ได้สำหรับพวกเขา มีรายการคุณสมบัติที่เพิ่มขึ้นให้ดูที่Script Centerสำหรับรายละเอียด

โฮสต์การเขียนสคริปต์ Windows

Windows Script Host (WSH) เป็นโฮสต์การเขียนสคริปต์สำหรับ ActiveX Scripting Engines VBScript และ JScript (การใช้งาน JavaScript ของ Microsoft) เป็นเอ็นจิ้นสองตัวที่ติดตั้งโดยค่าเริ่มต้น มีอีกหลายรายการที่เป็นโอเพนซอร์ซรวมถึง Perl, PHP และ Ruby

VBScript

การใช้ไวยากรณ์ที่คล้ายกันกับ VB6 และ VB.NET, VBScripts ไม่สามารถเข้าถึงคลาส. NET ได้อย่างง่ายดาย (Powershell เขียนบน. NET ดังนั้นจึงสามารถเข้าถึงฟังก์ชัน. NET ทั้งหมดได้) VBScript ส่วนใหญ่ใช้ประโยชน์จากบริการ WMI และวัตถุที่เปิดเผย

ตัวอย่าง: สิ่งนี้จะสร้างจุดคืนค่า

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

คุณยังสามารถเขียนสคริปต์เดียวกันโดยใช้ 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");
}

ไฟล์แบทช์คำสั่ง

แน่นอนว่ามีไฟล์ Batch ที่ดี พวกเขาไม่ต้องการคำแนะนำ


7
สำหรับ Windows 7 และ Server 2008 จะเป็น Powershell 2.0
sshow

@sshow เห็นด้วยเกี่ยวกับการเป็นเฉพาะเกี่ยวกับ 2.0
นิค Josevski

"พวกเขาไม่ต้องการคำนำ" แต่สิ่งที่ต้องทำก็คือ extro ...
เกล็นแจ็คแมน

16

ฉันยังคงเขียนไฟล์แบตช์ DOS แม้ใน Windows 7 สำหรับงานส่วนใหญ่ก็ยังใช้งานได้ดีและมันก็ใช้งานได้ง่ายมาก (เช่นกันคำสั่ง DOS หลายอย่างเช่น "FOR" ได้รับการปรับปรุงตลอดเวลาและให้มากกว่านี้ ตัวเลือกและฟังก์ชั่นการใช้งานที่ไม่สามารถใช้ได้นานกว่าทศวรรษที่ผ่านมา)

สำหรับฉันแล้วไฟล์แบตช์ DOS ยังคงเป็นภาษาสคริปต์หลักสำหรับ Windows (แน่นอนเป็นแบบดั้งเดิม) แต่ทุกคนมีความต้องการและความต้องการที่แตกต่างกัน มีหลายสิ่งที่ไฟล์แบทช์ DOS ไม่สามารถทำได้ (ภาษาสคริปต์สามารถสร้างข้อ จำกัด ได้เช่นกัน) และสำหรับโอกาสที่หาได้ยากซึ่งฉันได้พบสิ่งนี้ฉันจึงดูว่าตัวเลือกอื่น ๆ ของฉันคืออะไร (มักเป็น Perl หรือบางครั้งก็ทำได้ เป็นการเขียนโปรแกรมขนาดเล็กหรือแอปพลิเคชั่นทั้งหมด)

การทำความเข้าใจกับสิ่งที่คุณต้องทำให้สำเร็จเป็นขั้นตอนที่สำคัญมากในการตัดสินใจเลือกเครื่องมือที่จะใช้ ความคุ้นเคยกับเครื่องมือเป็นอีกสิ่งสำคัญที่สามารถ จำกัด ตัวเลือกของคุณ หากคุณกำลังพยายามตัดสินใจว่าจะเรียนรู้ภาษาสคริปต์ใด [หรือโปรแกรม] หวังว่าสิ่งนี้จะเป็นประโยชน์กับคุณ


10
หากใช้ภาษาสคริปต์ "หลัก" คุณหมายถึง "เก่าที่สุดและใช้กันอย่างแพร่หลายที่สุด" นี่เป็นคำตอบที่ถูกต้องแน่นอน อย่างไรก็ตามcmdจริงๆแล้วมันเป็นสิ่งที่น่าประหลาดใจจริงๆคือภาษาสคริปต์เชลล์ที่แย่ที่สุดที่ฉันเคยเจอมา
JSB ձոգչ

3
ฉันก็ใช้ไฟล์แบตช์เช่นกันเมื่อต้องใช้สคริปต์กับ Windows รุ่นอื่น หากคุณกำลังติดต่อกับ Win7 / Server 2008 เท่านั้น PowerShell คือหนทางที่จะไป
jtreser

5
+1 ฉันรู้ว่า MS ต้องการ PowerShell จะเป็นมันแต่ตอนนี้ถ้าคุณต้องการที่จะส่งคนสคริปต์ที่ใช้ "หน้าต่าง" คุณต้องส่งไฟล์ชุด DOS PS นั้นยอดเยี่ยมสำหรับ windows บางรุ่นสำหรับงานบางอย่างและพวกเขาเปิดเผยพลังงานจำนวนมาก แต่แฟ้มแบตช์เป็นสากล
อลันแจ็คสัน

ในบาง บริษัท เช่นธนาคารที่ฉันใช้งานอยู่นโยบายการดำเนินการจะป้องกันไม่ให้สคริปต์ PS ทำงาน ดังนั้นฉันจึงเรียนรู้ชุดการแปลสคริปต์ PS ของฉัน ดังนั้นจึงมีบางสถานการณ์ที่ยังจำเป็นต้องใช้แบทช์ ...
T_D

ฉันเห็นด้วยกับคำตอบของคุณในปี 2011 แต่ด้วย Windows 10 ผู้สร้างอัปเดต Microsoft ทำให้ PowerShell เป็นค่าเริ่มต้นเมื่อกด Win + X พิมพ์ 'cmd' ในเมนูเริ่มและกด Ctrl ค้างไว้เมื่อคลิกขวาใน Explorer ดังนั้นตอนนี้ฉันจึงพิจารณา Powershell ภาษาสคริปต์เริ่มต้นสำหรับ Windows ตั้งแต่ Windows 10 ผู้สร้างอัปเดตและสคริปต์ดั้งเดิม BAT / CMD
Jonas

10

ขึ้นอยู่กับว่าคุณถามใคร บางคนจะไม่ทิ้งชุดความรักบางคน vbscript บางความรักพลังนรกคนอื่น ๆ เช่น AutoIt จากนั้นมีแพลตฟอร์มอิสระเช่น Python และ Perl ที่บางคนจะสาบานสำหรับทุกสิ่ง


2
+1 สำหรับการพูดถึงภาษาสคริปต์ข้ามแพลตฟอร์ม (Perl เป็นที่ชื่นชอบและฉันรู้ว่า Python ได้รับความนิยมในช่วงหลายปีที่ผ่านมาด้วย)
Randolf Richardson

2
+1 สำหรับ Perl มันมีประโยชน์ในหลาย ๆ แพลตฟอร์มและมีโมดูลเฉพาะ Windows บางตัว
RedGrittyBrick

1
ฉันจะเพิ่มที่ TinyPerl เป็นวิธีที่มีประโยชน์มากในการฝังสคริปต์ Perl แบบง่าย ๆ ที่มีการพึ่งพาไม่มากเกินไป มันจะรวบรวมไฟล์ EXE ขนาดเล็กบน Windows tinyperl.sourceforge.net
เบอนัวต์

4

ฉันคิดว่าสคริปต์“ภาษา” อย่างเป็นทางการสำหรับ Windows จะเป็น (และได้รับตั้งแต่ Win95) สคริปต์ของ Windows โฮสต์

ในทางเทคนิคWSHไม่ใช่ภาษาสำหรับตัวเอง แต่เป็นสภาพแวดล้อม (ไม่ใช่ GUI) ที่แสดง COMอินเตอร์เฟสเพื่อให้คุณใช้ (เกือบ) ภาษาสคริปต์ใด ๆ ที่คุณต้องการเพื่อทำสิ่งต่าง ๆ ใน OS แม้แต่สิ่งที่ไม่มีวิธีดั้งเดิมในตัว ภาษา (ตัวอย่างเช่น Ruby ไม่มีวิธีการลงชื่อเข้าใช้ Windows ในตัวหรือ TCL / TK ไม่มีวิธีแสดงข้อความโต้ตอบในตัว)

คุณอาจเห็นไฟล์ WSF บางไฟล์ซึ่งสามารถรวมหลายภาษาในไฟล์เดียว แต่โดยปกติแล้วสคริปต์ WSH จะถูกเขียนในภาษาเดียวและกระจายด้วยส่วนขยายที่สอดคล้องกับเวอร์ชันสคริปต์ของภาษานั้น (เช่น VBS สำหรับสคริปต์ VisualBasic, PYS สำหรับ PythonScript ฯลฯ .)


[การสั่นสะเทือนทวีความรุนแรงมาก] ฉันเคยเขียนมัน คุณรู้หรือไม่ว่าคุณสามารถเรียกใช้สคริปต์ WSH โดยพลการจาก IE? ไม่น่าแปลกใจเลย ยินดีที่พวกเขาเปิด API ของพวกเขามากมายบนเว็บ (ข้อสงวนสิทธิ์ความเห็นถากถางดูถูกนี้เป็นวันที่ XP-SP3)
ThorSummoner

เรื่องราวเกี่ยวกับ WSH และ IE ไม่ง่ายอย่างนั้น: msdn.microsoft.com/en-us/library/bb250473(v=vs.85).aspx (เพียงหนึ่งตัวอย่างของข้อ จำกัด ขึ้นอยู่กับโซนความปลอดภัย) และ IE 11 ไม่ ไม่รองรับ VBScript อีกต่อไปนอกเหนือจากในโหมดเดิม อย่าพึ่งพา IE เพื่อเรียกใช้สคริปต์ WSH
Jonas

4

ฉันจะบอกว่า AutoIt มันให้การพัฒนาที่ง่ายและรวดเร็วบน windows และมีความแน่นมากควบคู่ไปกับมัน ซึ่งหมายความว่างานที่มักใช้รหัสค่อนข้างมากในภาษาอื่นสามารถทำได้ในอักษรบรรทัดเดียวใน autoit คุณสมบัติต่าง ๆ เช่นการคอมไพล์โดยตรงไปที่ exe ยังมีประโยชน์อย่างมาก


เช่นเดียวกับ monoceres ผมใช้AutoIt มันมีความหลากหลายอย่างยิ่งสำหรับการสร้างต้นแบบและการทดสอบที่รวดเร็วในเวลาไม่กี่นาที ในบรรดานั้นมันถูกออกแบบมาสำหรับระบบอัตโนมัติซึ่งเป็นสิ่งที่ฉันเห็นผู้คนจำนวนมากที่ใช้ Powershell ให้มันลอง :)
เจมส์

1
AutoIt ค่อนข้างเจ๋งโดยเฉพาะอย่างยิ่งสำหรับฟังก์ชั่น UI (ทำหน้าที่เหมือนผู้ใช้ที่พิมพ์ลงในกล่องโต้ตอบการกดปุ่ม ฯลฯ ) แต่มันจะเป็นเรื่องจริงที่จะเรียกในภาษาสคริปต์ "Windoze" หลัก ทุกวันนี้เพื่อนร่วมงานของฉันส่วนใหญ่ (ในทีมผู้ดูแลระบบ Windows มากกว่า 20 คน) ยังไม่เคยได้ยินเลย
eWall

2

ภาษาอื่น ๆ ที่กล่าวถึงในคำถามนี้ (VbScript, PowerShell, Batch) เป็นที่นิยมและได้รับการสนับสนุน หากคุณรู้ภาษาสคริปต์อยู่แล้วและรู้สึกสบายใจไม่ว่าจะด้วยวิธีใดก็ตาม

หากคุณกำลังจะลงทุนในการเลือกภาษาใหม่ฉันขอแนะนำสองภาษาสำหรับคุณขึ้นอยู่กับงานที่คุณพยายามทำ:

JavaScript (ผ่าน WSH) - ใช้ JavaScript หากคุณต้องการใช้ Object Automation ต่าง ๆ โดยสร้างอินสแตนซ์และเรียกใช้ Object Model ของพวกเขา คุณสามารถสร้าง Automation Object สำหรับทุกอย่างจาก Exchange Server ไปยัง WMI ไปยังเอกสาร Office มีการสนับสนุนการดีบักกับ Visual Studio (ด้วยอาร์กิวเมนต์ / x) นอกจากนี้การลงทุนใน JavaScript จะพิสูจน์ให้เป็นประโยชน์ใน HTML

Perl - ใช้ Perl หากคุณสามารถเปิดโปรแกรมอื่น ๆ จัดการผลลัพธ์ของพวกเขาดำเนินการแสดงออกปกติ แม้ว่าดูเหมือนว่าภาษานี้จะลดลง แต่ก็ยังเป็นภาษาที่ได้รับความนิยมและได้รับการสนับสนุนเป็นอย่างดีด้วยภาษาชุมชนขนาดใหญ่ คุณควรพิจารณาภาษานี้สำหรับการสื่อสารกับบริการอื่น ๆ (ไม่จำเป็นต้องเป็น Windows) เช่น JIRA ในองค์กรหรือ EC2 ใน Amazon การดีบักได้รับการสนับสนุนใน eclipse ด้วย EPIC ซึ่งเป็นสภาพแวดล้อม IDE ที่ดี (การกำหนดสีไวยากรณ์ ฯลฯ ) มีโมดูลใน CPAN สำหรับทุกสิ่ง ความรู้เกี่ยวกับ Perl จะพิสูจน์ว่ามีประโยชน์เมื่อต้องทำระบบอัตโนมัติบนเครื่องที่ไม่ใช่ Windows


1
งูหลามเป็นทางเลือกที่ดีมากที่จะ Perl แม้ว่าสิ่งที่คุณต้องการใช้สองสำหรับจะสวยเหมือนกันมาก
Phoshi

1

ในช่วงแรกมี VBScript ตามมาด้วย Batch ในสภาพแวดล้อมขององค์กรด้วย Windows 7 และ Server 2008 R2 ภาษาสคริปต์ใหม่ Powershell กำลังสร้างความสนใจอย่างมาก


ดูเหมือนว่าคุณจะแสดงความปรารถนาอย่างแรงกล้าที่จะใช้ PowerShell มันจะยุติธรรมที่จะสมมติว่าคุณ "ต้องการให้เป็น" PowerShell? ;-D
Randolf Richardson

ฉันเคย PowerShell มากกว่า vbscript ใช่
EKS

1

ฉันสองแนะนำสำหรับ Perl ถ้าคุณพร้อมที่จะเขียนสคริปต์ Perl บางอย่าง คนที่ฉันทำงานด้วยประสบความสำเร็จในการใช้งานและแนะนำCLR Script (เก่าไปหน่อย) และสำหรับการโต้ตอบกับเว็บสคริปต์iMacros


1

อาจเป็นเกือบทุกอย่างขึ้นอยู่กับสิ่งที่คุณพยายามทำให้เป็นอัตโนมัติ มันจะแตกต่างจากแบทช์ไฟล์และ PowerShell เป็น autohotkey และ Selenium (ถ้าคุณต้องการทำงาน GUI ที่เกี่ยวข้องโดยอัตโนมัติ)

โดยปกติแล้วจะไม่มีปัญหาในการเรียนรู้หากคุณต้องการเพิ่มการแก้ไขหรือสนับสนุนสคริปต์ที่เขียนแล้ว หากคุณต้องการพัฒนาสิ่งใหม่ ๆ - เลือกภาษา / วิธีตามความต้องการและสิ่งที่คุณรู้อยู่แล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.