过滤括号错误的显示名称

时间:2014-10-15 17:08:42

标签: powershell properties filter

除了标题之外,我的脚本不会向我的.txt文件发送任何信息。我想找到任何可能包含(),/,_等的显示名称。我是否无法使用*符号表示我希望过滤的任何显示名称包含“(”名称中的任何位置?

#Grab some AD attributes for the specific user ID
$userid = Get-ADUser -filter {displayname -like '*(' -or displayname -like '*_' -or displayname -like '*/'} -SearchBase "OU=Corporate,DC=we,DC=dirsrv,DC=com" -Properties name, displayname, description, manager

尝试让它显示在我的txt文件中,但仍然是PowerShell的新手

#Grab some AD attributes for the specific user ID
$userids = Get-ADUser -Properties name, displayname, description, manager -filter {displayname -like '*(*' -or displayname -like '*_*' -or displayname -like '*/*'} 

#THIS IS THE FOREACH I'M TRYING TO MAKE WORK
foreach ($userid in $userids)
{
$ID = Get-AdUser ($userid.displayname) -Properties displayname
$userid = $ID.displayname
}

foreach ($userid in $userids)
{
#manager missing
if ($userid.Manager -eq $null) {
    $owner = "MISSING"
    $ownerid = "MISSING"
    $ownername = "MISSING"

} else {
#grab the manager's name, surname, and department
    $owner = Get-ADUser ($userid.Manager) -Properties GivenName, Surname
    $ownerid = $owner.Name
    $ownername = $owner.Surname + "." + $owner.GivenName
   }
}

到目前为止我正在做什么。好运没有好运

2 个答案:

答案 0 :(得分:2)

当您使用-like运算符时,您正在查找(,_等等)结束的字符串。相反,您需要包围您要查找的字符通配符:

{displayname -like '*(*' -or displayname -like '*_(*' -or displayname -like '*/*'}

或者,对于更简洁的查询,您可以使用正则表达式:

{displayname  -match '[\(\)\\_]'}

请注意,因为(,)和\是特殊的正则表达式字符,所以必须使用\来转义它们。

答案 1 :(得分:0)

如果我输入代码

,那么
Get-AdUser -Properties displayname -filter {displayname -like '*(*'} | Select displayname

然后它会给我所有我需要的displayname .....自己注意!

现在将它与我的代码连接:P