0

所以我在我的剧本上做了一些“看家”,我发现了一个可以减少/整理的区域。使用我创建的这个 GUI:

在此处输入图像描述

两个菜单栏add_click事件 Restart HostnameA 和 HostnameB 调用单独的函数,即使这两个函数中的代码实际上是相同的,唯一的区别是主机名的这个变量(见下文)。

按钮事件的代码。

$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
}

我知道这很可能是错误的,但只是为了让您更好地了解我正在尝试做什么。

4

1 回答 1

2

创建一个定义 ComputerName 参数的通用函数并将该参数传递给基础 cmdlet:

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

cmdlet ComputerName 参数接受名称集合,因此该Rastart-Compter参数被定义为字符串数组。

现在,从代码中的任何位置调用 restart-machine 并将要重新启动的计算机名称传递给 ComputerName 参数。要重新启动多台机器,请用逗号分隔每个名称(即 restart-machine -computerName $combobox1.text,$combobox2.text)

$Restart_target_machine.Add_Click(
{
   restart-machine -computerName $combobox1.text
})
于 2012-08-03T13:53:55.620 回答