使用变量调用函数(带复选框)

时间:2014-08-21 11:11:54

标签: function powershell checkbox

我对powershell很新。我刚刚用powershell studio创建了一个GUI(顺便说一下好的产品!),我的代码完美无缺。但我不喜欢我编程的“外观”。我想在这里学到的是我没有做到的事情:

当我点击一个按钮时,我就可以使用它:

if ($checkbox1.Checked -eq $true )
{   
    (Get-WmiObject -Computer $table[0] Win32_Service -Filter "Name='TlntSvr'").InvokeMethod("StopService",$null)
    $serv = (Get-WmiObject -Class win32_service -ComputerName $table[0]     | ? { $_.name -like "tlntSvr" } )
    $tel1.text = $serv.state

    if ($serv.state = "Running" )
        {$tel1.backcolor = 'Chartreuse'}
    else
        {$tel1.backcolor = 'Red'}
}

它做了什么,检查是否勾选了复选框,勾选了复选框,然后停止telnet服务,然后在我的gui上显示新状态。再次,这工作正常。

我的问题是我有8个复选框(名为$ checkbox1,$ checkbox2 ....)。所以我有8倍的代码,一次是checkbox1,一次是checkbox2等。同样的varibale $ tel,这是一个显示字段,每个“if”都有变化(对于复选框1,我需要更新tel1 ,对于checkbox2,我需要更新tel2等。)。

如何简化此操作并进行函数调用?我知道如何使用fonction,但是在函数中你所做的stuf不在同一个变量上(一次在checkbox1上,一次在checkbox2上)。

如何让这更“干净”?

1 个答案:

答案 0 :(得分:0)

也许你可以按照以下方式做点什么:

首先,您将为复选框(#1到#8)的每次迭代更改的细节创建新变量。在下面的快速示例中,我为原始代码中的'service'和'tel'创建了变量。

然后定义变量,您将点击主进程,该进程利用您定义的新变量。这样,您可以查看更少的代码并变得更易于管理。

# Setting Variables
if ($checkbox1.checked -eq $true)
{
    $service = TlntSvr
    $tel = $tel1
}
elseif ($checkbox2.checked -eq $true)
{
    $service = OtherService
    $tel = $tel2
}
elseif ($checkbox3.checked -eq $true)
{
    etc...
}

# Main Process
(gwmi -Computer $table[0] Win32_Service -Filter "Name='$service'").InvokeMethod("StopService",$null)
$serv = (Get-WmiObject -Class win32_service -ComputerName $table[0]     | ? { $_.name -like "'$service'" } )
$tel.text = $serv.state

if ($serv.state = "Running" )
    {$tel.backcolor = 'Chartreuse'}
else
    {$tel.backcolor = 'Red'}
}