将全局初始化为$ null的Powershell失败了

时间:2016-01-08 21:32:10

标签: powershell null

我正在运行一个接受用户输入的GUI,但如果他们犯了错误,可以在最终确定之前进行更改。当表单打开时,我试图将全局变量初始化为null。这是失败的。我在代码上放了一个断点,然后查看了之前的值,然后进入了它。值不会改变。

例如,如果我运行表单并输入“Foo”作为我的全局变量,退出表单,然后再次运行表单,即使在有问题的行执行后,全局的值仍然是“Foo” 。到底是怎么回事?我已将这个确切的代码与其他GUI一起使用,但它从未失败(但是这些值是自动生成的,而不是基于用户输入生成的)。

# Define and initialize global variables
$global:ServerName = $null   # <-- This fails to reset the variable from the previous run of the form


function ValidateChoices(){
    $OKToGo = $true
    $TempServerName = $null
    try {
        # Only Allow Valid NETBios Name with AlphaNumberic and - up to 15 characters
        [ValidatePattern("^[A-Za-z\d-]{1,15}$")]$TempServerName = $ServerNameTextbox.Text
        $ServerNameTitle.BackColor = ""
        $ServerNameTextbox.BackColor = ""
        $global:ServerName = $TempServerName
    } catch {
        $OKToGo = $false
        $ServerNameTitle.BackColor = "Pink"
        $ServerNameTextbox.BackColor = "Pink"
    }

...

    if ( $OKToGo ){
        "ServerName=" + $global:ServerName | Out-File c:\debug.txt
    }
}

1 个答案:

答案 0 :(得分:0)

以下是答案:当针对变量运行ValidatePattern时,会在尝试更改变量时保留并重新评估这些限制。即使没有显式调用ValidatePattern,也是如此。因为它是一个全局变量,这些限制通过表单的多次迭代来进行。因为$ null不符合我列出的ValidatePattern参数,所以忽略了更改值的调用