【问题标题】:Powershell: Passing parameters to functionPowershell:将参数传递给函数
【发布时间】:2023-03-26 14:56:01
【问题描述】:

所以我在我的剧本中做了一些“看家”,我发现了一个可以减少/整理的区域。 使用我创建的这个 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
}

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

【问题讨论】:

    标签: powershell parameters parameter-passing code-duplication


    【解决方案1】:

    创建一个定义 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
    })
    

    【讨论】:

    • 感谢谢伊,你是明星,你又来帮助我了。你介意解释一下 ([string[]]$ComputerName) - 我知道这个变量叫做 '$computename' 但是 '[string[]]' 是什么意思/做什么?
    • 当参数类型设置为 '[string]' 时,参数只接受一个字符串。如果将其设置为 '[string[]]' 它可以接受一个或多个(数组)字符串。当您将多个值传递给此类参数时,您需要用逗号分隔每个字符串。
    猜你喜欢
    • 2022-10-07
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2019-02-09
    • 2022-01-05
    相关资源
    最近更新 更多