winforms Powershell -需要帮助将变量从一个进程传递到另一个进程

vsaztqbk  于 2023-03-03  发布在  Shell
关注(0)|答案(1)|浏览(103)

我正在尝试编写一个脚本,它将创建一个非常简单的GUI,带有一个下拉列表和一个文本框用于输入。我在下拉列表中使用区域,然后将selectedIndex传递给一个进程,该进程在嵌套的if语句中为该区域分配服务器的主机名。如果选择了"确定",它将根据所选的索引和文本框中的文本输入分配主机名/打印机名。如果我写-在第一个进程中,它给了我正确的主机名,但是它没有把字符串传递到管道中。有人能帮忙吗?

# Create the logic for what happens when a list item is selected, and define the print server based on selected index.
$List.add_SelectedIndexChanged({
$Selected = $List.SelectedIndex
if ( 1 -eq $Selected )
{
($Server = 'serverName-1')
}
else
{
    if ( 2 -eq $Selected )
    {
    ($Server = 'serverName-2')
    }
    else
    {
        if ( 3 -eq $Selected )
        {
        ($Server = 'serverName-3')
        }
        else
        {
            if ( 4 -eq $Selected)
            { 
            ($Server = 'serverName-4')
            }
            else
            {
            ($Server = 'null')
            }
        }
    }
}
Write-Output $Server
})

#Process that happens after okay is pressed
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
# I need to know why when I define $Server above, it isn't passing the data here.
$ServerName = $Server
$PrinterName = $textBox.Text
Add-Printer -ConnectionName \\$ServerName\$PrinterName
}

在安装了Powershell外接程序的情况下在Visual Studio代码中运行时,此操作的结果为\printerName。

  • 在添加Write-Output $Server之前,我得到了一个关于已定义但未使用的变量的错误,所以我编写了输出,希望传递数据。

先谢了!

nx7onnlm

nx7onnlm1#

事件在与主窗体不同的作用域中执行,但是您可以使用引用类型(如哈希表)在脚本作用域中从它们获取结果:

# this reference type is defined in the script scope
# it can be seen and updated from the event!
$ref = @{}

$List.Add_SelectedIndexChanged({
    $value = switch($List.SelectedIndex) {
        1 { 'serverName-1' }
        2 { 'serverName-2' }
        3 { 'serverName-3' }
        4 { 'serverName-4' }
        Default { 'null' }
    }

    # update the reference type variable outside this scope
    $ref['Server'] = $value
})

if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
    $ServerName  = $ref['Server'] # here you can reference outside variable
    $PrinterName = $textBox.Text
    Add-Printer -ConnectionName \\$ServerName\$PrinterName
}

相关问题