0

だから私は自分のスクリプトで少し「HouseKeepying」をやっていて、削減/整理できる領域を1つ見つけました。私が作成したこのGUIを使用してください。

ここに画像の説明を入力してください

HostnameAとHostnameBを再起動する両方のメニューバーadd_clickイベントは、両方の関数のコードが実質的に同じであっても、別々の関数を呼び出します。唯一の違いは、ホスト名のこの変数です(以下を参照)。

ボタンイベントのコード。

$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、どちらかのマシンを再起動するための1つの機能しか持たないようにする方法はありますか?

何かのようなもの?

$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パラメーターを定義するジェネリック関数を作成し、そのパラメーターを基になるコマンドレットに渡します。

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

コマンドレット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 に答える