如果我有一个共同的模式,如何简化 if/else 代码
How to simplify if/else code if I have a common pattern
根据我的理解,我不是在寻找 if 语句或 elseif 语句。在 foreach 语句中,我试图检查 X,然后做一件事,检查 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 -parallel 的东西,这可能是我想要的,但它必须在工作流程中,我认为这不是正确的方向。我需要 运行 喜欢其中的 10 个 if 语句,然后在 foreach 语句中执行所有代码。
如果我解释得不好,或者您需要我澄清任何事情,请告诉我。预先感谢您的帮助。
假设 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"
}
根据我的理解,我不是在寻找 if 语句或 elseif 语句。在 foreach 语句中,我试图检查 X,然后做一件事,检查 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 -parallel 的东西,这可能是我想要的,但它必须在工作流程中,我认为这不是正确的方向。我需要 运行 喜欢其中的 10 个 if 语句,然后在 foreach 语句中执行所有代码。
如果我解释得不好,或者您需要我澄清任何事情,请告诉我。预先感谢您的帮助。
假设 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"
}