因此,当前在新的员工脚本上工作,而我对if语句一旦返回true true
就会有些困惑我希望它继续使用if语句,直到结束,以查看它是否更好地匹配其他任何内容。有人可以解释为什么它是这样工作的(我猜是为性能(
我通过重新安排IF语句的顺序解决了我的问题,但是我想知道是否有更好或更优雅的方法可以解决这个问题?
因此,一个示例如下:在我将最后一个Elseif放在底部之前
ElseIf ($school -eq 'KCC' -And $Department -eq 'IT Staff'){
[STRING]$MiddleOU = 'OU=IT Services,OU=Business Managment,OU=Staff,OU=Users,OU='
[STRING]$HomeDirectory = ('\ad.esw.org.ukKCCStaffUsers'+ $SamAccountName)
}
ElseIf ($school -eq 'KCC' -And $Department -eq 'ILS Staff'){
[STRING]$MiddleOU = 'OU=Resources,OU=Business Managment,OU=Staff,OU=Users,OU='
[STRING]$HomeDirectory = ('\ad.esw.org.ukKCCStaffUsers'+ $SamAccountName)
}
ElseIf ($school -eq 'KCC' -And $Department -eq 'DATA Staff'){
[STRING]$MiddleOU = 'OU=Data,OU=Business Managment,OU=Staff,OU=Users,OU='
[STRING]$HomeDirectory = ('\ad.esw.org.ukKCCStaffUsers'+ $SamAccountName)
}
ElseIf ($school -eq 'KCC' -And $Department -eq 'Facilities Staff'){
[STRING]$MiddleOU = 'OU=Estates & Facilities,OU=Business Managment,OU=Staff,OU=Users,OU='
[STRING]$HomeDirectory = ('\ad.esw.org.ukKCCStaffUsers'+ $SamAccountName)
}
ElseIf ($school -eq 'KCC' -And $Department -eq 'Catering Staff'){
[STRING]$MiddleOU = 'OU=Events & Catering,OU=Business Managment,OU=Staff,OU=Users,OU='
[STRING]$HomeDirectory = ('\ad.esw.org.ukKCCStaffUsers'+ $SamAccountName)
}
ElseIf ($school -eq 'KCC'){
[STRING]$MiddleOU = 'OU=Staff,OU=Users,OU='
[STRING]$HomeDirectory = ('\ad.esw.org.ukKCCStaffUsers'+ $SamAccountName)
}
if/elseif
无法按照您希望的方式工作。它将停止照顾它有效匹配。它孤立地评估每个案例,除非当前情况不匹配,否则不会寻找"更好"的匹配。
这不是用于性能优化,而是各种编程语言中的标准行为,而不仅仅是PowerShell。
在官方文档中获取更多详细信息:大约
仅出于完整性而引起的,并引用了实施此类构造的更可取的方法。
$dom="\ad.esw.org.uk"
$deptdata=@(
@{dept='IT Staff'; ou='OU=IT Services,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$domKCCStaffUsers$SamAccountName"},
@{dept='ILS Staff'; ou='OU=Resources,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$domKCCStaffUsers$SamAccountName"},
@{dept='DATA Staff'; ou='OU=Data,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$domKCCStaffUsers$SamAccountName"},
@{dept='Facilities Staff'; ou='OU=Estates & Facilities,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$domKCCStaffUsers$SamAccountName"},
@{dept='Catering Staff'; ou='OU=Events & Catering,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$domKCCStaffUsers$SamAccountName"}
)
If ($school -eq 'KCC'){
$MiddleOU = 'OU=Staff,OU=Users,OU='
$HomeDirectory = ("$domKCCStaffUsers$SamAccountName")
$deptdata | where {$_.dept -eq $Department} | foreach {
$MiddleOU = $_.ou
$HomeDirectory = $_.homedir
}
}
作为进一步的改进,数据可以存储在外部JSON/XML文件中。
我将其视为编程逻辑。我删除了一些不必要的" [string]'s and'(('s。也许我不明白这个问题。将通用匹配放置最后解决问题吗?这是非常典型的程序逻辑。太糟糕的$ department和$ middou使用不同的术语。
if ($school -eq 'KCC) {
$HomeDirectory = "\ad.esw.org.ukKCCStaffUsers$SamAccountName"
If ($Department -eq 'IT Staff'){
$MiddleOU = 'OU=IT Services,OU=Business Managment,OU=Staff,OU=Users,OU='
}
ElseIf ($Department -eq 'ILS Staff'){
$MiddleOU = 'OU=Resources,OU=Business Managment,OU=Staff,OU=Users,OU='
}
ElseIf ($Department -eq 'DATA Staff'){
$MiddleOU = 'OU=Data,OU=Business Managment,OU=Staff,OU=Users,OU='
}
ElseIf ($Department -eq 'Facilities Staff'){
$MiddleOU = 'OU=Estates & Facilities,OU=Business Managment,OU=Staff,OU=Users,OU='
}
ElseIf ($Department -eq 'Catering Staff'){
$MiddleOU = 'OU=Events & Catering,OU=Business Managment,OU=Staff,OU=Users,OU='
}
Else {
$MiddleOU = 'OU=Staff,OU=Users,OU='
}
}