循环中获取更高范围的当前项

时间:2010-08-25 15:53:13

标签: powershell loops

我在switch语句中有一个嵌套的switch语句。我想知道是否有可能在嵌套的switch语句的范围内获取未嵌套的当前项。我知道我可以通过一个具有中等难度的for循环来完成这个任务但是我希望有一些优雅我缺少用switch语句完成这个。下面我尝试为我的一个脚本构建一些参数处理。

# Process Args
$currentArg
$recurseOn = $false

:ListArgs switch -regex ($args)
{
    "-ou?" { $currentArg = "Organizational Unit"; write-host "Noticed ou switch"}
    "-li?k?e?" { $currentArg = "Compare To"; write-host "Noticed like switch"}
    "^-re?c?u?r?s?e?$" { $recurseOn = $true; write-host "Recurse switched on..."}
    default {
        :CurrentSwitch switch ($currentArg)
        {
            "Organizational Unit" { $OU = $_.$_ ; write-host "OU changed to '$($OU)'..."}
            "Compare To" { $Match = $_.$_ ; write-host "Lookup changed to '$($Match)'..."}
        }
    }
}

我知道$ 的现有模型。$ ​​不起作用,但我正在寻找可以引用当前项目的东西。我想我可以有一个填充变量,我只是填写当前项目而不管条件和范围内使用,但也许有更优雅的东西。我也尝试标记我的switch语句并尝试'ListArgs。$ _'无济于事。

非常感谢任何输入。提前谢谢!

发布后我这样做了:

    # Process Args
$currentArg
$recurseOn = $false

:ListArgs switch -regex ($args)
{
    "-ou?" { $currentArg = "Organizational Unit"; write-host "Noticed ou switch"}
    "-li?k?e?" { $currentArg = "Compare To"; write-host "Noticed like switch"}
    "^-re?c?u?r?s?e?$" { $recurseOn = $true; write-host "Recurse switched on..."}
    default {
        $item = $_
        :CurrentSwitch switch ($currentArg)
        {
            "Organizational Unit" { $OU = $item; write-host "OU changed to '$($OU)'..."}
            "Compare To" { $Match = $item; write-host "Lookup changed to '$($Match)'..."}
        }
    }
}

并且能够让它正常工作,但是对于$ _或循环标签的任何输入都会受到赞赏。或者有更好的方法在PowerShell中进行arg处理吗?

2 个答案:

答案 0 :(得分:1)

我想因为没有更好的建议来进行论证处理,我回答了我自己的问题。

    $item = $_

答案 1 :(得分:0)

  

我想我可以有一个填充物   变量,我只是填写   当前项目,无论条件如何   并在范围内使用

通常我这样做,我不知道更好的方法。因此,您的代码将是:

...
default {
    $filler = $_
    :CurrentSwitch switch ($currentArg)
    {
        "Organizational Unit" { use $filler in here }
        "Compare To" { use $filler in here }
    }
}