根据我的理解,我不是在寻找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语句并在所有语句之后执行代码。
请告诉我,如果我的工作做得不好,或者你需要我澄清任何事情。在此先感谢您的帮助。
答案 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"
}