部分字符串混淆的PowerShell比较

部分字符串混淆的PowerShell比较,powershell,conditional,Powershell,Conditional,我在一个数组中有一组部分职称,我试图将其与(广告)中某人的完整职称进行比较-像和-匹配,以及其他所有代码,都不起作用 [string[]]$Titles =@('genetic','medic','nurs','optome','perfusion','pharm','phys') ($titles -like $user.Title) - nope ($user.title -contains $titles) - nope ($Titles.Contains($user.title)) -

我在一个数组中有一组部分职称,我试图将其与(广告)中某人的完整职称进行比较<代码>-像和-匹配,以及其他所有代码,都不起作用

[string[]]$Titles =@('genetic','medic','nurs','optome','perfusion','pharm','phys')

($titles -like $user.Title) - nope
($user.title -contains $titles) - nope
($Titles.Contains($user.title)) - nope
我需要一个用户标题“内科医生”,以匹配“物理”。为什么不起作用?

若要执行您(似乎)想要的操作,请对
$Titles
中的每个标题进行迭代(“循环”),并将
$User.title
属性与每个单独的部分标题进行比较,然后查看是否有任何标题返回
$true

foreach($User in Get-ADUser -Filter * -Properties Title){
    $TitleFound = @($Titles |ForEach-Object {$User.Title -like "$_*"} ) -contains $true
    if($TitleFound){
        Do-Stuff
    }
}

也就是说,您可能希望使用部分字符串来构建一个字符串,这样域控制器就可以进行过滤,而不是返回所有用户

如果使用LDAP搜索筛选器语法,您的查询将如下所示:

(|(title=genetic*)(title=medic*)(title=nurs*)(title=optome*)(title=perfusion*)(title=pharm*)(title=phys*))
您可以使用
ForEach对象从字符串数组中生成:

# The | prefix means "or", as in "if any of these statements are true", return the object
$FilterTemplate = '(|{0})' 

# This will be the comparison statements inside the filter
$FilterCriteria = $Titles |Foreach-Object { '(title={0}*)' -f $_ }

# Now put it all together
$LDAPFilter = $FilterTemplate -f -join($FilterCriteria)

# And retrieve the users:
$MedicalStaff = Get-ADUser -LDAPFilter $LDAPFilter -Properties Title

再次感谢马蒂亚斯。第一部分正是我要找的!