2011-08-22 4 views
46

Vì một lý do nào đó, có vẻ như tôi không thể chuyển mảng chuỗi làm tham số cho tập lệnh. Tôi đang làm gì ở đây sai?Làm cách nào để truyền mảng thành tham số cho tập lệnh khác?

Kịch bản của tôi được gọi là từ kịch bản khác:

param(
    [parameter(Mandatory=$true)] 
    [string[]]$myarr 
) 

foreach ($elem in $myarr){ 
$elem 
} 

Tôi gọi nó là từ kịch bản khác như

[email protected]("111","222") 
start-job -filepath myscript.ps1 -arg $myarr 

có chỉ mục đầu tiên trong mảng - "111"

Trả lời

66

Hãy dùng thử như sau:

start-job -filepath myscript.ps1 -arg (,$myarr) 

Các -ArgumentList có trong một danh sách/mảng của các đối số. Vì vậy, khi bạn cung cấp cho -arg $myarr, nó là như thể bạn đang đi qua các yếu tố của mảng như các đối số. Vì vậy, bạn phải ép PowerShell coi nó là một đối số duy nhất là một mảng.

+0

vâng, nó hoạt động. Bạn có thể giải thích lý do tại sao? :) như tôi hiểu nó dấu phẩy trong() có nghĩa là nó thực sự là một mảng với hai mảng phụ, phải không? – mishkin

+7

@Mishkin - Giải thích sẽ là -ArgumentList có trong danh sách/mảng đối số. Vì vậy, khi bạn cung cấp '-arg $ myarr', nó giống như bạn đang truyền các phần tử của mảng làm đối số. Vì vậy, bạn phải ép buộc powershell coi nó như một đối số duy nhất là một mảng. – manojlds

+0

Bạn sẽ chuyển mảng và biến số khác như thế nào? -arg (, $ myarr, $ singleValue). Ví dụ: $ singleValue = "x" – eHaze