所以我在我的剧本上做了一些'House Keepying',我找到了一个可以减少/整理的区域。 拿这个我创建的GUI:
两个菜单栏add_click
事件重新启动HostnameA和HostnameB调用单独的函数,即使两个函数中的代码实际上是相同的,唯一的区别是主机名的这个变量(见下文)。 p>
按钮事件代码。
$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
}
我知道这很可能是错误的,但只是为了让你更好地了解我正在做的事情。
答案 0 :(得分:2)
创建一个定义ComputerName参数的泛型函数,并将该参数传递给基础cmdlet:
function restart-machine ([string[]]$ComputerName)
{
Restart-Computer -ComputerName $ComputerName -Force
}
Rastart-Compter
cmdlet ComputerName参数接受一组名称,因此参数将作为字符串数组保留。
现在,从代码中的任何位置调用restart-machine并传递计算机名称以重新启动到ComputerName参数。要重新启动多台计算机,请用逗号分隔每个名称(即restart-machine -computerName $ combobox1.text,$ combobox2.text)
$Restart_target_machine.Add_Click(
{
restart-machine -computerName $combobox1.text
})