如果我有一个共同的模式,如何简化if / else代码

时间:2017-03-19 02:57:35

标签: powershell powershell-v5.0

根据我的理解,我不是在寻找if语句或elseif语句。在一个foreach语句中,我试图检查X,并做一件事,检查Y,并检查Y,检查Z,并为此做一些不同的事情。

这是我目前的代码:

    #5 | Add-UserToGrp and adding each user in their OUs to their respective Groups
Function Add-UserToGrp
{
    $OUusers = Import-Csv -Path "C:\MyScripts\FinalProject\csv\createUsers.csv"

    foreach($OU in $OUusers)
    {
        $user   = $OU.OUName
        $oupath = $OU.OUPath

        if($oupath -eq "Sales_OU")
        {
            Add-ADGroupMember -Identity "CN=SalesGrp,CN=Users,DC=PT,DC=LOCAL" -Members "CN=$user,OU=SalesOU,DC=PT,DC=LOCAL"
        }
        if($oupath -eq "HR_OU")
        {
            Add-ADGroupMember -Identity "CN=HRGrp,CN=Users,DC=PT,DC=LOCAL" -Members "CN=$user,OU=HR_OU,DC=PT,DC=LOCAL"
        }
    }

是否有一些神奇的陈述会做我想做的事情?我看到了一些关于foreach的东西,这可能是我想要的,但它必须在一个工作流程中,我不认为这是正确的方向。我需要在foreach语句中运行10个if语句并在所有语句之后执行代码。

请告诉我,如果我的工作做得不好,或者你需要我澄清任何事情。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

假设您的OUPath的所有可能值都采用相同的格式,这将简化您的逻辑,而不使用if / else结构。除了错字之外,你之前有过基础知识。

Function Add-UserToGrp
{
    $OUusers = Import-Csv -Path "C:\MyScripts\FinalProject\csv\createUsers.csv"

    foreach($OU in $OUusers)
    {
        $user   = $OU.OUName
        $oupath = $OU.OUPath

        # Get everything before OU in $path, with an optional _ between the first part and the OU.  HR_OU becomes HR.  SomethingElseOU becomes SomethingElse.
        $null = ($oupath -imatch "([^_]+)_?OU")
        $path = $matches[1]

        # this combines the $path part into a combined string with the Grp. HR becomes HRGrp.  Sales becomes SalesGrp.
        Add-ADGroupMember -Identity "CN=$($path)Grp,CN=Users,DC=PT,DC=LOCAL" -Members "CN=$user,OU=$oupath,DC=PT,DC=LOCAL"
    }