Powershell:将参数传递给函数

时间:2012-08-03 12:46:48

标签: powershell parameters parameter-passing code-duplication

所以我在我的剧本上做了一些'House Keepying',我找到了一个可以减少/整理的区域。 拿这个我创建的GUI:

enter image description here

两个菜单栏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
}

我知道这很可能是错误的,但只是为了让你更好地了解我正在做的事情。

1 个答案:

答案 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
})