输出的目录数据不正确

时间:2013-07-22 18:02:00

标签: powershell powershell-v1.0

以下代码将获取目录并为每个目录创建菜单项。它工作正常,直到Add_Click部分;由于某种原因,无论点击什么按钮,它都会吐出相同的文件。

$directory = Get-ChildItem -Path ($relative_path + "/scripts")

foreach ($file in $directory) 
{
    $mnuTemp = New-Object System.Windows.Forms.MenuItem
    $mnuTemp.Text = $file.Name
    $mnuTemp.Add_Click({Write-Host $file.Name})
    $mnuScripts.MenuItems.Add($mnuTemp)
}

1 个答案:

答案 0 :(得分:0)

添加click命令后,您仍然会传递对 $ file.name 的引用。

$mnuTemp.Add_Click({Write-Host $file.Name})

您需要将引用传递给完全评估的scriptblock。

$mnuTemp.Add_Click([scriptblock]::Create("write-host $($file.name)"))

我已使用以下更改编辑了您的代码。

$directory = Get-ChildItem -Path ($relative_path + "/scripts")

foreach ($file in $directory) 
{
    $mnuTemp = New-Object System.Windows.Forms.MenuItem
    $mnuTemp.Text = $file.Name
    $mnuTemp.Add_Click([scriptblock]::Create("write-host $($file.name)"))
    $mnuScripts.MenuItems.Add($mnuTemp)
}