ในไฟล์แบตช์ของฉันฉันเรียกสคริปต์ PowerShell ดังนี้:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
START_DEV.ps1
ตอนนี้ผมต้องการที่จะผ่านพารามิเตอร์สตริง w=Dev
สมมติว่าพารามิเตอร์เป็น
ฉันจะทำเช่นนี้ได้อย่างไร?
ในไฟล์แบตช์ของฉันฉันเรียกสคริปต์ PowerShell ดังนี้:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
START_DEV.ps1
ตอนนี้ผมต้องการที่จะผ่านพารามิเตอร์สตริง w=Dev
สมมติว่าพารามิเตอร์เป็น
ฉันจะทำเช่นนี้ได้อย่างไร?
คำตอบ:
สมมติว่าคุณต้องการส่งสตริงDev
เป็นพารามิเตอร์จากไฟล์แบตช์ของคุณ:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
ใส่ไว้ในหัวสคริปต์ powershell ของคุณ:
$w = $args[0] # $w would be set to "Dev"
$args
นี้ถ้าคุณต้องการที่จะใช้ในตัวตัวแปร มิฉะนั้น:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
และภายในหัวสคริปต์ powershell ของคุณ:
param([string]$Environment)
หากคุณต้องการพารามิเตอร์ที่ตั้งชื่อ
คุณอาจสนใจที่จะคืนระดับข้อผิดพลาด:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"
%errorlevel%
ระดับข้อผิดพลาดจะสามารถใช้ได้ภายในแฟ้มชุดเป็น
สมมติว่าสคริปต์ของคุณเป็นตัวอย่างด้านล่างและชื่อ testargs.ps1
param ([string]$w)
Write-Output $w
คุณสามารถเรียกสิ่งนี้ได้ที่ commandline ว่า:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
สิ่งนี้จะพิมพ์ "Test String" (โดยไม่มีเครื่องหมายคำพูด) ที่คอนโซล "สตริงทดสอบ" กลายเป็นค่า $ w ในสคริปต์
เมื่อสคริปต์จะโหลดพารามิเตอร์ใด ๆ $args
ที่ส่งผ่านกำลังโหลดโดยอัตโนมัติเป็นตัวแปรพิเศษ คุณสามารถอ้างอิงสิ่งนั้นในสคริปต์ของคุณได้โดยไม่ต้องประกาศก่อน
ตัวอย่างเช่นสร้างไฟล์ที่เรียกว่าtest.ps1
และมีตัวแปร$args
ในบรรทัดด้วยตัวเอง การเรียกใช้สคริปต์เช่นนี้สร้างผลลัพธ์ต่อไปนี้:
PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three
ตามคำแนะนำทั่วไปเมื่อเรียกใช้สคริปต์โดยเรียกใช้ PowerShell โดยตรงฉันขอแนะนำให้ใช้-File
ตัวเลือกนี้แทนที่จะเรียกใช้โดยปริยายด้วยคำแนะนำ&
- มันสามารถทำให้บรรทัดคำสั่งสะอาดขึ้นเล็กน้อยโดยเฉพาะอย่างยิ่งหากคุณต้องการจัดการกับเครื่องหมายคำพูดที่ซ้อนกัน
เพิ่มการประกาศพารามิเตอร์ที่ด้านบนของไฟล์ ps1
param(
# Our preferred encoding
[parameter(Mandatory=$false)]
[ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
[string]$Encoding = "UTF8"
)
write ("Encoding : {0}" -f $Encoding)
C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII
คำตอบจาก @Emiliano นั้นยอดเยี่ยมมาก คุณยังสามารถส่งผ่านพารามิเตอร์ที่ตั้งชื่อได้เช่นนี้:
powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"
สังเกตว่าพารามิเตอร์อยู่นอกการเรียกคำสั่งและคุณจะใช้:
[parameter(Mandatory=$false)]
[string]$NamedParam1,
[parameter(Mandatory=$false)]
[string]$NamedParam2