2012-08-03 166 views
0

因此,我在腳本上做了一些「House Keeping」,我發現一個區域可以縮小/整理。 把這個GUI我已經創建:Powershell:將參數傳遞到函數

enter image description here

兩個菜單欄add_click事件重新啓動HostnameA和HostnameB調用單獨的功能,即使在這兩個功能的代碼是pratically一樣的,唯一不同的是這主機名變量(見下文)。

按鈕事件的代碼。

$Restart_current_machine.Add_Click(
{ 
restart_current_machines 
}) 

$Restart_target_machine.Add_Click(
{ 
restart_target_machines 
}) 

# Function Blocks 

function restart_target_machines 
{ 
restart-computer -computer $combobox1.text -force 
} 

function restart_current_machines 
{ 
restart-computer -computer $combobox2.text -force 
} 

我的問題是這樣的: 是有辦法,我可以使用Param()(或類似的東西),以擺脫function restart_current_machines從而只有一個功能,要麼重新啓動機器?

有點像?

$Restart_current_machine.Add_Click(
{ 
param($input = combobox1.text) 
$input | restart_current_machines 
}) 

$Restart_target_machine.Add_Click(
{ 
param($input = combobox2.text) 
$input | restart_current_machines 
}) 

# Only needing one function 

function restart_target_machines 
{ 
restart-computer -computer $input -force 
} 

我知道這很可能是錯誤的,但只是爲了讓你更好地瞭解我正在嘗試做什麼。

回答

2

創建通用函數限定ComputerName參數和參數傳遞到下面的小命令:

function restart-machine ([string[]]$ComputerName) 
{ 
    Restart-Computer -ComputerName $ComputerName -Force 
} 

Rastart-Compter cmdlet的ComputerName參數接受名稱的集合,從而所述參數被defained作爲一個字符串數組。

現在,從代碼中的任何位置調用restart-machine並傳遞計算機名稱以重新啓動ComputerName參數。要重新啓動多臺機器,劃定每個名稱用逗號(即重啓機器-computerName $ combobox1.text,$ combobox2.text)

$Restart_target_machine.Add_Click(
{ 
    restart-machine -computerName $combobox1.text 
}) 
+0

謝謝吉文,你是一個明星,你來我的幫助再次。 你介意解釋([字符串[]] $計算機名) - 我得到的變量被稱爲'$ computename',但'[字符串[]]'是什麼意思/做什麼? – obious 2012-08-03 15:09:04

+1

當參數類型設置爲'[string]'時,參數只接受一個字符串。如果將它設置爲'[string []]',它可以接受一個或多個(數組)字符串。當您將多個值傳遞給此類參數時,用逗號分隔每個字符串。 – 2012-08-03 15:55:19