ค้นหาเว็บไซต์

เรียกใช้ Batch File จาก PowerShell [4 วิธี]


ใน Windows PowerShell เราสามารถเรียกใช้ไฟล์แบตช์ได้หลายวิธี

  • เรียกใช้ไฟล์แบตช์โดยการระบุเส้นทางสัมบูรณ์หรือสัมพัทธ์โดยใช้ตัวดำเนินการเครื่องหมายแอมเพอร์แซนด์ (&):

    เรียกใช้ไฟล์ bat โดยใช้ & โอเปอเรเตอร์:

    Write-Host "Running the Batch Script Now..."
    & C:\Scripts\testPS.bat
  • เรียกใช้ไฟล์แบตช์โดยใช้ cmdlet Invoke-Expression คำสั่งนี้ทำงานคล้ายกับตัวดำเนินการเครื่องหมายและ (&) แต่เราเขียนคำสั่งในรูปแบบ PowerShell

    การรันไฟล์ bat โดยใช้คำสั่ง invoke-expression:

    Invoke-Expression -Command ".\testPS.bat"
  • เรียกใช้แบตช์ไฟล์โดยการเรียกไฟล์ปฏิบัติการพร้อมรับคำสั่ง:

    เรียกใช้ไฟล์ bat โดยเรียก cmd ภายใน powershell:

    cmd.exe -/c ".\testPS.bat"
  • เรียกใช้แบตช์ไฟล์โดยใช้ cmdlet Start-Process เช่นเดียวกับคำสั่ง PowerShell อื่นๆ ของเรา cmdlet นี้ทำงานคล้ายกันเมื่อเราเรียกไฟล์ปฏิบัติการ แต่เราเขียนมันในรูปแบบ PowerShell คำสั่งนี้ยังยอมรับอาร์กิวเมนต์หากเราส่งตัวแปรไปยังไฟล์

    การรันไฟล์ bat โดยใช้คำสั่ง start-expression:

    Start-Process "cmd.exe" ".\testPS.bat" -Verb RunAs -NoNewWindow
    -Verb RunAs -NoNewWindow

วิธีเรียกใช้ไฟล์แบตช์ใน PowerShell

PowerShell เป็นหนึ่งในวิธีการเขียนสคริปต์สมัยใหม่ โดยเฉพาะบนแพลตฟอร์มหรือเครื่องที่ใช้ระบบปฏิบัติการ Windows อย่างไรก็ตาม บางครั้ง แม้จะมีการปรับปรุงให้ทันสมัย แต่ก็ยังมีงานที่ต้องใช้ความพยายามเล็กน้อยซึ่งภาษาสคริปต์แบบเดิมมีข้อได้เปรียบ ตัวอย่างหนึ่งของสิ่งนี้คือขั้นตอนการเขียนสคริปต์แบบเดิมเหล่านี้เรียกว่าสคริปต์ชุดงาน

เราสามารถรวมสคริปต์ชุดงานไว้ใน PowerShell ได้อย่างง่ายดาย เนื่องจาก Windows สร้างภาษาสคริปต์ทั้งสองภาษาบนแพลตฟอร์มเดียวกัน บทความนี้จะกล่าวถึงวิธีที่เราสามารถเรียกใช้และรวมสคริปต์ชุดงานไว้ใน PowerShell

มีหลายวิธีในการเรียกใช้แบตช์ไฟล์ (BAT) หรือสคริปต์ภายในสภาพแวดล้อม PowerShell

การรันไฟล์ BAT โดยใช้เส้นทางสัมบูรณ์และสัมพัทธ์

สำหรับวิธีแรกของเรา เราสามารถเรียกใช้ไฟล์ BAT ได้โดยเพียงแค่เรียกเส้นทางไฟล์หรือตำแหน่งของไฟล์ โดยทำตามขั้นตอนด้านล่าง:

  1. เปิด PowerShell (โดยเฉพาะในโหมดผู้ดูแลระบบ)
  2. ไปที่ไดเร็กทอรีที่เราวางไฟล์แบตช์หรือสคริปต์ไว้ เราสามารถใช้ check directory หรือคำสั่ง cd เพื่อนำทาง สำหรับตัวอย่างนี้ เรามาสร้างและ cd ไปยังไดเร็กทอรี C:\Scripts และค้นหาไฟล์แบตช์ตัวอย่าง
  3. เรียกใช้แบตช์ไฟล์หรือสคริปต์โดยพิมพ์ชื่อแล้วกด Enter ตัวอย่างเช่น หากเราสร้างแบตช์ไฟล์ชื่อ testPS.bat ให้ใช้คำสั่งต่อไปนี้:

เรียกชื่อไฟล์ของไฟล์ bat:

testPS.bat

อีกทางหนึ่ง เราสามารถเรียกใช้แบตช์ไฟล์หรือสคริปต์โดยการระบุพาธแบบสัมพัทธ์หรือแบบสัมบูรณ์ในคำสั่ง PowerShell ตัวอย่างเช่น หากต้องการเรียกใช้แบตช์ไฟล์ที่อยู่ในไดเร็กทอรี C:\Scripts เราสามารถใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้:

การเรียกเส้นทางสัมบูรณ์และสัมพัทธ์ของไฟล์ bat:

.\testPS.bat
C:\Scripts\testPS.bat

เมื่อทำเช่นนี้ เราไม่จำเป็นต้อง cd ลงในไดเร็กทอรีด้วยตนเอง โปรดทราบว่าเราใช้ไวยากรณ์ .\ เพื่อระบุเส้นทางสัมพัทธ์ ในขณะที่เส้นทางแบบเต็มระบุเส้นทางสัมบูรณ์

อย่างไรก็ตาม วิธีการข้างต้นจะมีประโยชน์หากเราเรียกใช้ไฟล์ BAT ภายในเทอร์มินัลบรรทัดคำสั่งของ PowerShell อย่างไรก็ตาม จะเกิดอะไรขึ้นถ้าเรารวมไฟล์ BAT ไว้ในไฟล์ PowerShell ซึ่งอาจอยู่ใน PowerShell ISE ล่ะ

เราสามารถใช้ตัวดำเนินการเครื่องหมายและ (&) และนำหน้าเส้นทางไฟล์ BAT ของเรา อย่างไรก็ตาม มันไม่ได้ทำหน้าที่เพิ่มเติมใดๆ เนื่องจากหน้าที่หลักคือการรันคำสั่ง อย่างไรก็ตาม นี่เป็นแนวทางปฏิบัติที่ดีในการเขียนสคริปต์และปรับปรุงความสามารถในการอ่านโค้ดของเรา เนื่องจาก & แสดงว่าเรากำลังดำเนินการคำสั่งดั้งเดิมภายใน PowerShell

ตัวอย่างเช่น นี่คือตัวอย่างสคริปต์ PowerShell:

การเรียกเส้นทางสัมบูรณ์และสัมพัทธ์ของไฟล์ bat ภายใน PowerShell:

Write-Host "This is a powershell script."
Write-Host "Running the Batch Script Now..."
& C:\Scripts\testPS.bat

การรันไฟล์ BAT โดยใช้คำสั่ง Invoke-Expression

นอกจากนี้ยังสามารถเรียกใช้แบตช์ไฟล์หรือสคริปต์โดยใช้ Inrigger-Expression cmdlet ซึ่งช่วยให้คุณสามารถเรียกใช้สตริงราวกับว่าเป็นคำสั่ง เราสามารถทำได้หากเราต้องการสคริปต์ทุกอย่างด้วยรสชาติของ PowerShell แทนที่จะใช้ตัวดำเนินการ & ตัวอย่างเช่น หากต้องการเรียกใช้แบตช์ไฟล์ที่อยู่ในไดเร็กทอรี C:\Scripts คุณสามารถใช้คำสั่งต่อไปนี้:

รันไฟล์ bat โดยใช้ inake-expression:

Invoke-Expression -Command ".\testPS.bat"

เรายังสามารถใช้ Inrigger-Expression cmdlet เพื่อรันคำสั่งที่เก็บไว้ในตัวแปร ตัวอย่างเช่น:

เรียกใช้ไฟล์ bat โดยใช้ตัวอย่างการเรียกใช้นิพจน์ 2:

$batFileLocation = ".\testPS.bat"
Invoke-Expression -Command $batFileLocation

เรียกใช้ไฟล์ BAT โดยเรียก Command Prompt

ใน PowerShell เช่นเดียวกับเทอร์มินัลอื่นๆ เราสามารถเรียกไฟล์ปฏิบัติการได้ นอกจากนี้ ยังเป็นการดีที่ Command Prompt มีไฟล์ปฏิบัติการเฉพาะที่เรียกว่า cmd.exe เราสามารถใช้ไฟล์ปฏิบัติการนี้เพื่อเรียกใช้ไฟล์ BAT ให้เราภายในสภาพแวดล้อม PowerShell

เราเพียงต้องเพิ่มพารามิเตอร์ /c ลงในไฟล์ cmd.exe และต่อท้ายเส้นทางไปยังไฟล์ BAT พารามิเตอร์ /c คล้ายกับคำสั่ง Inrigger-Expression ก่อนหน้า ซึ่งจะแปลงค่าสตริงเป็นคำสั่งภายในไฟล์ปฏิบัติการ

เรียกใช้ไฟล์ bat โดยเรียก cmd exe:

cmd.exe -/c ".\testPS.bat"

การรันไฟล์ BAT โดยใช้คำสั่ง Start-Process

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

รันไฟล์ bat โดยใช้กระบวนการเริ่มต้น:

Start-Process -FilePath '.\testPS.bat' -NoNewWindow

เราผนวกคำสั่ง Start-Process ด้วยพารามิเตอร์สองตัว ได้แก่ -FilePath และ -NoNewWindow พารามิเตอร์พาธของไฟล์จะกำหนดตำแหน่งไฟล์ BAT ที่เราจะดำเนินการ และพารามิเตอร์ -NoNewWindow เริ่มกระบวนการที่กำหนดในหน้าต่างปัจจุบันโดยไม่ต้องเปิดหน้าต่าง PowerShell อื่น

หรืออีกทางหนึ่ง เราสามารถแปลงคำสั่งก่อนหน้าให้ยอมรับอาร์กิวเมนต์โดยใช้พารามิเตอร์ -ArgumentList

การรันไฟล์ bat ในการเรียกใช้นิพจน์พร้อมอาร์กิวเมนต์:

Start-Process -FilePath 'cmd.exe' -ArgumentList @("/C", "'testfilePS.bat'") -Verb RunAs -NoNewWindow

ดังที่เราเห็น ฉันยังเพิ่มพารามิเตอร์ใหม่ที่เรียกว่า -Verb ด้วยค่า RunAs ที่จะอนุญาตให้ PowerShell เริ่มต้นกระบวนการในโหมดผู้ดูแลระบบ

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

การรันไฟล์ bat ในการเรียกใช้ชวเลขนิพจน์:

Start-Process "cmd.exe" ".\testPS.bat" -Verb RunAs -NoNewWindow

ค่าแรกบ่งบอกว่ากระบวนการใดที่จะเริ่มต้น และค่าที่สองคือพาธของไฟล์พร้อมกับอาร์กิวเมนต์ (ถ้ามี)

ต่อไปนี้เป็นตัวอย่างของการเรียกใช้ไฟล์แบตช์หรือสคริปต์ภายในสภาพแวดล้อม PowerShell เราอาจต้องการวิธีการที่แตกต่างกันในการเรียกใช้สคริปต์และไฟล์แบตช์ของเรา ทั้งนี้ขึ้นอยู่กับความต้องการเฉพาะของเรา

นั่นคือทั้งหมดที่เกี่ยวกับวิธีการเรียกใช้ไฟล์ bat ใน PowerShell

บทความที่เกี่ยวข้อง