2016-04-04 6 views
0

Ich versuche, eine Funktion zu machen, so dass ich jemandes Telefonnummer schneller suchen oder eine Erweiterung reverse suchen kann.get-aduser -ldapfilter dies oder das

Bisher habe ich dies als ps1-Datei gespeichert:

$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 

Der Code funktioniert, aber natürlich ich rot Fehlercode erhalten entweder für den ersten oder zweiten Zustand jedes Mal. Ich habe versucht (|(This)(That)), ich habe versucht -erroraction silentlycontinue, ich habe versucht -LDAPFilter (This) -OR (That).

Was ich schließlich nach ist eine Funktion, die ich zu meinem Profil hinzufügen kann, so dass ich geben kann entweder:

lookup ABC 
lookup 2948 

und es wird einen Forward-Lookup oder ein Reverse-Lookup tun. Es kann eine lockere Suche sein und bei Bedarf ein paar zu viele Ergebnisse zurückgeben.

Antwort

0

Lesen Sie Ihre Frage erneut und bearbeitet. Dies funktioniert für Sie, Sie können Ihre Formatierung und zurückgegebenen Eigenschaften hinzufügen, wie Sie für richtig halten.

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

} 
+0

Das ist großartig! Ich habe es modifiziert, um ein endgültiges '| hinzuzufügen Wählen Sie Name in der zweiten Anweisung, so dass nur der Name zurückgegeben wird. Vielen Dank Chris! – davehahn

+0

@davehahn kein Problem. Wenn Sie seltsame Zeichen in Ihrer Domain haben, die ebenfalls Nummern enthalten, und wenn sie eine Nutzernamensuche in die Telefonlogik werfen, fügen Sie einfach "-and $ search -notmatch '[a-z] [A-Z]'" zum zweiten Logikgatter hinzu. Sie sollten es nicht brauchen, aber nur für den Fall. –

0

(|(firstClause)(secondClause)) ist die richtige Syntax für OR Filter in LDAP - das ist nicht dein Problem.

Beide Filterklauseln enthalten syntaktische Fehler.
Die erste sollte (die = bemerken):

(samaccountname=*$find*) 

Die zweite weil nur ungültig ist * führende oder nachfolgende zulässig ist. Sie tun können:

(telephonenumber=*$find*) 

und dann Where-Object verwenden, um die Ergebnisse zu Zahlen mit dem richtigen Präfix zu verengen:

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

Beachten Sie, dass führende * aufgrund der Art und Weise schrecklich langsam sind diese Werte werden intern in Active Directory nachgeschlagen.

+0

Auch die Verwendung '-Eigenschaften *' sollte aus Leistungsgründen nicht empfohlen werden. Wie Sie _all_ die Eigenschaften benötigen. Er verwendet nur die 'Telefonnummer', also' -Eigenschaftstelefonnummer' – Matt

+0

@Matt wahr, nicht so schlecht, wenn der Filter schmal genug ist ('-Filter * -Eigenschaften *' wäre schrecklich) –

+0

Wenn jemand LDAPFilter verwenden will , Sie könnten auch einfach ADSI verwenden .. lol! –

0

Ich würde wahrscheinlich zwei Parameter und zwei separate Parametersätze angeben. Beispiel:

# 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 

Damit Sie schreiben können:

Get-User thisusername 

oder

Get-User -TelephoneNumber thisphonenumber 

ich gegen die Verwendung von -Properties "*" wie diese Vorsicht würde wird sehr langsam sein. Besser, die Liste der Attribute anzugeben, die Sie sehen möchten.

Verwandte Themen