2011-09-14 26 views
7

Tôi đang cố gắng viết hàm bao bọc trong PowerShell về cơ bản đánh giá tham số đầu tiên và dựa trên đó chạy chương trình trên máy tính. Tất cả các tham số còn lại cho hàm wrapper sau đó sẽ được chuyển đến chương trình đang chạy.Chức năng trình bao trong PowerShell: Chuyển các tham số còn lại

Vì vậy, nó sẽ giống như thế này:

function test ([string] $option) 
{ 
    if ($option -eq 'A') 
    { 
     Write-Host $args 
    } 
    elseif ($option -eq 'B') 
    { 
     . 'C:\Program Files\some\program.exe' $args 
    } 
} 

Bây giờ chỉ cần thêm $args không hoạt động, vì vậy những gì tôi phải làm gì để làm cho nó hoạt động? Một lựa chọn khác có thể sẽ sử dụng Invoke-Expression, nhưng nó cảm thấy một chút như eval vì vậy tôi muốn tránh nếu có thể, và ngoài ra tôi nghĩ rằng làm như thế sẽ giới hạn tôi để chuỗi chỉ thông số phải không? Nếu có thể, tôi sẽ muốn có sự hỗ trợ đầy đủ cho chương trình/cmdlet được gói gọn - về cơ bản giống như một bí danh động. Điều đó thậm chí có thể?

Trả lời

10

Loại này làm những gì bạn yêu cầu. Bạn có thể gặp rắc rối nếu bạn cần chuyển các tùy chọn tiền tố dấu gạch ngang đến tệp thực thi xung đột hoặc gây ra sự mơ hồ với các tham số phổ biến của PowerShell. Nhưng điều này có thể giúp bạn bắt đầu.

function Invoke-MyProgram 
{ 
    [CmdletBinding()] 
    Param 
    (
     [parameter(mandatory=$true, position=0)][string]$Option, 
     [parameter(mandatory=$false, position=1, ValueFromRemainingArguments=$true)]$Remaining 
    ) 

    if ($Option -eq 'A') 
    { 
     Write-Host $Remaining 
    } 
    elseif ($Option -eq 'B') 
    { 
     & 'C:\Program Files\some\program.exe' @Remaining # NOTE: @ not $ (splatting) 
    } 
} 
2

gì bạn đã viết (trừ các lỗi cú pháp ở else if - nó phải được elseif) không làm việc. Lưu ý rằng những gì có là $args là các đối số chưa đặt tên vượt quá các tham số mà hàm này mong đợi.

Vì vậy, nếu bạn gọi kiểm tra như

test -option "A" 1 2 3 

$args sẽ có 1,2,3

Lưu ý rằng nếu bạn gọi kiểm tra như

test -option "A" -other "B" 1 2 3 

$args sẽ có -other,B,1,2,3

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