get-aduser -ldapfilter这个或那个

时间:2016-04-04 20:09:27

标签: powershell

我正在尝试创建一个函数,以便我可以更快地查找某人的电话号码或反向查找扩展名。

到目前为止,我将其保存为ps1文件:

$find=$args[0]
Get-ADUser -properties * -LDAPFilter "(samaccountname*$find*)" | ft samaccountname,Name,telephone number
Get-ADUser -properties * -LDAPFilter "(telephonenumber=555 555-*$find*)" | ft samaccountname,Name,telephonenumber

代码有效,但显然我每次都会得到第一个或第二个条件的红色错误代码。我试过(|(This)(That)),我试过-erroraction silentlycontinue,我试过-LDAPFilter (This) -OR (That)

我最终追求的是我可以添加到我的个人资料中的功能,以便我可以输入:

lookup ABC
lookup 2948

它将执行正向查找或反向查找。它可能是一个松散的搜索,并在必要时返回一些太多的结果。

3 个答案:

答案 0 :(得分:0)

(|(firstClause)(secondClause))是LDAP中OR过滤器的正确语法 - 这不是您的问题。

两个过滤条款都包含语法错误 第一个应该是(注意=):

(samaccountname=*$find*)

第二个无效,因为只允许前导或尾随*。你可以这样做:

(telephonenumber=*$find*)

然后使用Where-Object将结果缩小为具有正确前缀的数字:

Get-ADUser -Properties telephonenumber -LDAPFilter "(|(samaccountname*$find*)(telephonenumber=*$find*))" |Where-Object { $_.telephoneNumber -like "555 555-*"}

请注意,由于在Active Directory内部查找这些值的方式,前导*非常慢。

答案 1 :(得分:0)

我可能会指定两个参数和两个单独的参数集。例如:

# Get-User.ps1
[CmdletBinding(DefaultParameterSetName="SamAccountName")]
param(
  [Parameter(ParameterSetName="SamAccountName",Position=0,Mandatory=$true)]
    [String] $SamAccountName,
  [Parameter(ParameterSetName="TelephoneNumber",Position=0,Mandatory=$true)]
    [String] $TelephoneNumber
)

$params = @{
  "Properties" = "*"
  "LDAPFilter" = ""
}
switch ( $PSCmdlet.ParameterSetName ) {
  "SamAccountName" {
    $params.LDAPFilter = "(sAMAccountName=$SamAccountName)"
  }
  "TelephoneNumber" {
    $params.LDAPFilter = "(telephoneNumber=$TelephoneNumber)"
  }
}
Get-ADUser @params

有了这个,你可以写:

Get-User thisusername

Get-User -TelephoneNumber thisphonenumber

我会警告不要使用-Properties "*"因为这会很慢。最好指定要查看的属性列表。

答案 2 :(得分:0)

重新阅读您的问题并进行编辑。这对您有用,您可以根据需要添加格式和返回的属性。

function lookup {
param (
[Parameter(Mandatory=$True,Position=1)]
[string]$search
)

    if ($search -match '[a-z][A-Z]'){
        return (Get-ADUser $search -Properties TelephoneNumber).TelePhoneNumber
    }

    if ($search -match '[0-9]'){
        return Get-ADUser -Properties TelephoneNumber -Filter "TelephoneNumber -like '*$search*'"
    }

}