因此,当前正在研究新的职员脚本,并且对于If语句一旦返回true就会退出的原因感到有些困惑
我希望它继续使用If语句,直到最后,看看它是否与其他任何语句更好地匹配。有人可以解释为什么这种方式起作用(我在猜测性能)
我已经通过重新安排If语句的顺序解决了我的问题,但是我想知道是否有更好或更优雅的方法来解决这个问题?
因此,下面是一个示例: 在我将最后一个ElseIf放到底部之前,来自XX学校的任何职员都被放到职员OU中,即使他们的部门是If -AND语句中列出的部门之一
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.uk\KCC\StaffUsers\'+ $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.uk\KCC\StaffUsers\'+ $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.uk\KCC\StaffUsers\'+ $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.uk\KCC\StaffUsers\'+ $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.uk\KCC\StaffUsers\'+ $SamAccountName)
}
ElseIf ($school -eq 'KCC'){
[STRING]$MiddleOU = 'OU=Staff,OU=Users,OU='
[STRING]$HomeDirectory = ('\\ad.esw.org.uk\KCC\StaffUsers\'+ $SamAccountName)
}
答案 0 :(得分:2)
if/elseif
不能按您希望的方式工作。进行有效匹配后,它将停止寻找。它会独立评估每个案件,除非当前案件不匹配,否则不会寻找“更好”的匹配。
这不是为了优化性能,而是各种编程语言(不仅仅是PowerShell)中的标准行为。
在官方文档中获取更多详细信息:about_If
答案 1 :(得分:1)
仅出于完整性考虑,并作为实现此类构造的更佳方法的参考。
$dom="\\ad.esw.org.uk"
$deptdata=@(
@{dept='IT Staff'; ou='OU=IT Services,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$dom\KCC\StaffUsers\$SamAccountName"},
@{dept='ILS Staff'; ou='OU=Resources,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$dom\KCC\StaffUsers\$SamAccountName"},
@{dept='DATA Staff'; ou='OU=Data,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$dom\KCC\StaffUsers\$SamAccountName"},
@{dept='Facilities Staff'; ou='OU=Estates & Facilities,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$dom\KCC\StaffUsers\$SamAccountName"},
@{dept='Catering Staff'; ou='OU=Events & Catering,OU=Business Managment,OU=Staff,OU=Users,OU='; homedir="$dom\KCC\StaffUsers\$SamAccountName"}
)
If ($school -eq 'KCC'){
$MiddleOU = 'OU=Staff,OU=Users,OU='
$HomeDirectory = ("$dom\KCC\StaffUsers\$SamAccountName")
$deptdata | where {$_.dept -eq $Department} | foreach {
$MiddleOU = $_.ou
$HomeDirectory = $_.homedir
}
}
作为进一步的改进,数据可以存储在外部JSON / XML文件中。
答案 2 :(得分:0)
我将其视为编程逻辑问题。我已经删除了一些不必要的'[string]'和'()'。也许我不明白这个问题。不能将通用匹配项放在最后解决问题吗?这是非常典型的程序逻辑。糟糕的$ Department和$ MiddleOU使用不同的术语。
register_post_type