2010-08-02 40 views
6

Tôi muốn bắt đầu tập lệnh script1.ps1 bằng một tập lệnh khác với các đối số được lưu trữ trong một biến.powershell: tập lệnh có biến args

$para = "-Name name -GUI -desc ""this is the description"" -dryrun"
. .\script1.ps1 $para

Các args tôi nhận được trong script1.ps1 trông giống như:

args [0]: Tên-gui -desc "này là mô tả" -dryrun -Name

vì vậy đây không phải là điều tôi muốn nhận. Có ai biết cách giải quyết vấn đề này không?
thx lepi

PS: Không chắc chắn có bao nhiêu đối số biến sẽ chứa và cách chúng sẽ được xếp hạng.

Trả lời

5

Sử dụng Invoke-Expression được một aternative:

$para = '-Name name -GUI -desc "this is the description" -dryrun' 
Invoke-Expression -Command ".\script1.ps1 $para" 
+0

thx, kết quả là ở cuối cùng nhưng đây là biến thể thực sự tốt đẹp và ngắn! – lepi

7

Bạn cần sử dụng toán tử chia nhỏ. Hãy xem powershell team blog hoặc tại đây tại stackoverflow.com.

Dưới đây là một ví dụ:

@' 
param(
    [string]$Name, 
    [string]$Street, 
    [string]$FavouriteColor 
) 
write-host name $name 
write-host Street $Street 
write-host FavouriteColor $FavouriteColor 
'@ | Set-Content splatting.ps1 

# you may pass an array (parameters are bound by position) 
$x = 'my name','Corner' 
.\splatting.ps1 @x 

# or hashtable, basically the same as .\splatting -favouritecolor blue -name 'my name' 
$x = @{FavouriteColor='blue' 
    Name='my name' 
} 
.\splatting.ps1 @x 

Trong trường hợp của bạn, bạn cần phải gọi nó như thế này:

$para = @{Name='name'; GUI=$true; desc='this is the description'; dryrun=$true} 
. .\script1.ps1 @para 
+0

thx for the anwser , nó hoạt động perfektly ngay bây giờ! – lepi

+0

Tôi rất vui vì tôi đã giúp. Nếu bạn hài lòng với (các) câu trả lời, bạn có thể đóng các câu hỏi bằng cách chấp nhận câu trả lời;) – stej

+0

Trường hợp toán tử _splatting_ ở đâu? Không có nhà điều hành nào ở đây chỉ xảy ra là cách PowerShell xử lý các lệnh ... tức là đó là một tính năng, không phải là toán tử. –

Các vấn đề liên quan