2012-06-22 28 views
8

Tôi muốn gọi một lệnh hiện có với số tham số động.Làm cách nào để truyền các tham số động trong Powershell?

Vì vậy, thay vì làm điều này (lấy máy chủ ghi làm ví dụ), tôi muốn làm điều đó một cách thông minh.

# these are the dynamic parameters which maybe get passed into my function or script 
# they would be $null be default of course 
$forecolor = 'Green' 
$newline = $true 

# now build the "dynamic" write-host... 
if ($forecolor) { 
    if ($newline) { 
     write-host -fore $forecolor "Hello world" 
    } 
    else { 
     write-host -fore $forecolor "Hello world" -nonewline 
    } 
} 
else { 
    if ($newline) { 
     write-host "Hello world" 
    } 
    else { 
     write-host "Hello world" -nonewline 
    } 
} 

Điều này tất nhiên là rất xấu. Giúp tôi làm cho nó đẹp hơn!

Tôi đã thử chỉ thiết lập $forecolor = '-fore Green' chỉ xuất kết quả là "-fore Green Hello world". Tôi có thể nghĩ rằng đi qua một danh sách các đối số cho một hàm và đối với mỗi đối số trong danh sách thêm tham số theo - Tôi chỉ không biết cách giữ các tham số.

+0

Bạn đã xem bộ tham số chưa? http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/30/use-parameter-sets-to-simplify-powershell-commands.aspx –

+0

David, những trợ giúp đó sẽ giúp ích như thế nào ở đây? Tôi bối rối. – Joey

Trả lời

16

Bạn chỉ có thể vượt qua các biến của bạn như các đối số để Write-Host:

Write-Host -Fore $forecolor -NoNewLine:(!$newline) 'Hello World' 

Đối với một cách thực sự năng động, bạn có thể sử dụng một Hashtable:

$params = @{ NoNewLine = $true; ForegroundColor = 'Green' } 

và sau đó sử dụng các nhà điều hành splat

Write-Host @params Hello World 

Bạn có thể thêm thông số và giá trị của thông số vào hàm có thể chia sẻ như bạn muốn trước đây gọi số Write-Host theo cách đó.

+4

** Tuyệt vời! ** Đây là một bài viết về việc chia nhỏ: http://technet.microsoft.com/en-us/magazine/gg675931.aspx chưa bao giờ nghe về thuật sĩ đó trước đây. Cảm ơn. –

+0

Tôi đã làm việc nhiều năm với PowerShell và chưa bao giờ nghe nói về điều này. Cuối cùng, tôi đã làm: Tính năng tuyệt vời! – AstralisSomnium

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