Powershell:使用函数切换脚本变量

时间:2018-07-19 16:13:53

标签: powershell global-variables

我有一个带有默认值的菜单。通过选择菜单项,我希望菜单项的值进行切换。我的切换功能无法正常工作,因为我无法设置全局变量,因此我使用了一些在SO上找到的示例,并且能够切换预设值。现在,我发现我无法将默认选项变量传递给切换功能并进行设置。请指教。谢谢。

#toggle test

$optionYes="Yes"
$optionNo="No"

echo "$optionYes, $optionNo"

function toggle($option) {
    if ($option -eq "Yes") { $global:option="No" }
    elseif ($option -eq "No") { $global:option="Yes" } }

toggle $optionYes
toggle $optionNo

echo "$optionYes, $optionNo"

$defaultExcel = "Yes"
function toggleOption($defaultOption) {
    if ($defaultOption -eq "Yes") {
        $global:defaultOption = "No"
    } elseif ($defaultOption -eq "No") {
        $global:defaultOption = "Yes"
    }
    $redrawMenu
}

function displayMenu() {
    echo "1) Excel [$defaultExcel]"
    echo "[1] to toggle option"
}

function runMenu() {
    do {
        displayMenu
        $choice=(Read-Host "Option")
        switch ($choice) {
            '1' {toggleOption $defaultExcel; runMenu}
            'Q' {exit}
        }
    } until ($choice -eq "Q")
}
runMenu

1 个答案:

答案 0 :(得分:1)

全局变量使代码令人困惑。从功能生成全局变量会使代码无法维护。我建议从函数中获取一个返回值,然后将其存储到所需的变量中:

function Set-Option {
    param(
        [Parameter(Position = 0, Mandatory)]
        [ValidateSet('Yes', 'No')]
        [string] $Option
    )

    if ($Option -eq 'Yes') {
        'No'
    } else {
        'Yes'
    }
}

使用中:

'1' { $global:DefaultOption = Set-Option $defaultExcel; runMenu }