簡體   English   中英

get-aduser -ldapfilter this或that

[英]get-aduser -ldapfilter this or that

我正在嘗試創建一個功能,以便可以更快地查找某人的電話號碼或反向查找分機號。

到目前為止,我已將其另存為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

它將進行正向查找或反向查找。 這可能是一個松散的搜索,並在必要時返回一些太多的結果。

(|(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中內部查找這些值的方式,前導*的速度非常慢。

我可能會指定兩個參數和兩個單獨的參數集。 例:

# 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 "*"因為這會很慢。 最好指定要查看的屬性列表。

重新閱讀您的問題並進行編輯。 這將為您工作,您可以根據需要添加格式和返回的屬性。

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*'"
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM