Chuyển tham số từ một tệp hàng loạt sang một tập lệnh PowerShell


88

Trong tệp hàng loạt của mình, tôi gọi tập lệnh PowerShell như sau:

powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"

Bây giờ, tôi muốn chuyển một tham số chuỗi vào START_DEV.ps1. Giả sử tham số là w=Dev.

Tôi có thể làm cái này như thế nào?


1
Tập lệnh mong đợi tham số được đặt tên hay tham số ẩn danh?
vonPryz

Câu trả lời:


139

Giả sử bạn muốn chuyển chuỗi Devdưới dạng tham số, từ tệp lô của bạn:

powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"

đặt bên trong phần đầu tập lệnh powershell của bạn:

$w = $args[0]       # $w would be set to "Dev"

Điều này nếu bạn muốn sử dụng biến tích hợp $args. Nếu không thì:

 powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""

và bên trong phần đầu tập lệnh quyền hạn của bạn:

param([string]$Environment)

Điều này nếu bạn muốn một tham số được đặt tên.

Bạn cũng có thể quan tâm đến việc trả về mức độ lỗi:

powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"

Mức độ lỗi sẽ có sẵn bên trong tệp loạt dưới dạng %errorlevel%.


23

Giả sử tập lệnh của bạn giống như đoạn mã dưới đây và có tên là testargs.ps1

param ([string]$w)
Write-Output $w

Bạn có thể gọi điều này tại dòng lệnh là:

PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"

Thao tác này sẽ in "Chuỗi kiểm tra" (w / o ngoặc kép) tại bảng điều khiển. "Chuỗi kiểm tra" trở thành giá trị của $ w trong tập lệnh.


13

Khi một tập lệnh được tải, bất kỳ tham số nào được truyền sẽ tự động được tải vào một biến đặc biệt $args. Bạn có thể tham chiếu điều đó trong tập lệnh của mình mà không cần khai báo trước.

Ví dụ: tạo một tệp được gọi test.ps1và chỉ cần có biến $argstrên một dòng. Gọi tập lệnh như thế này, tạo ra kết quả sau:

PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three

Theo khuyến nghị chung, khi gọi một tập lệnh bằng cách gọi trực tiếp PowerShell, tôi khuyên bạn nên sử dụng -Filetùy chọn thay vì ngầm gọi nó với &- nó có thể làm cho dòng lệnh gọn gàng hơn một chút, đặc biệt nếu bạn cần xử lý các dấu ngoặc kép lồng nhau.


7

Thêm khai báo tham số ở đầu tệp ps1

test.ps1

param(
  # Our preferred encoding
  [parameter(Mandatory=$false)]
  [ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
  [string]$Encoding = "UTF8"
)

write ("Encoding : {0}" -f $Encoding)

Kết quả

C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII

6

Câu trả lời từ @Emiliano là tuyệt vời. Bạn cũng có thể chuyển các tham số được đặt tên như vậy:

powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"

Lưu ý rằng các tham số nằm ngoài lệnh gọi và bạn sẽ sử dụng:

[parameter(Mandatory=$false)]
  [string]$NamedParam1,
[parameter(Mandatory=$false)]
  [string]$NamedParam2
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.