получить имя samaccount от имени и фамилии - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь использовать сценарий PowerShell, чтобы запросить имя и фамилию, а затем отобразить samAccountname. Я попытался это сделать, но это не сработало.

$Names = Read-host "Jack Robinson"
$Usernames = 
    Get-ADUser -Filter "FirstName -eq $($_.FirstName) -and Surname -eq $($_.LastName)" -Properties 'SamAccountName' |
        Select-Object -ExpandProperty 'SamAccountName'

Ответы [ 3 ]

1 голос
/ 29 марта 2020

С точки зрения получения информации от CSV, смотрите полезный ответ @wasif Hasan. С точки зрения вашего конкретного кода без ввода csv - вам лучше разделить ваш запрос имени и фамилии двумя запросами read-host. Обратите внимание на имена атрибутов GivenName для имени и Surname для фамилии

$firstname = read-host "first name"
$LastName = read-host "LastName"
Get-ADUser -Filter "GivenName -eq '$FirstName' -and Surname -eq '$LastName'"|
Select-Object -ExpandProperty 'SamAccountName'

В качестве альтернативы, если вы не можете удвоить запросы read-host, как показано выше, вы можете попытаться выполнить фильтрацию на displayname который обычно состоит из имени и фамилии

$name = read-host "name"
Get-ADUser -Filter "Displayname -eq '$Name'"|
Select-Object -ExpandProperty 'SamAccountName'
0 голосов
/ 30 марта 2020

Я предполагаю, что «Джек Робинсон» должен быть примером ввода. Как вы понимаете, это приглашение, которое Read-Host покажет пользователю. Вы, вероятно, хотите что-то вроде этого:

$Names = Read-Host "Enter the name"

Разделение имени и фамилии на основе пробелов никогда не бывает надежным, особенно в случае двух или трехсловных фамилий. Таким образом, вы должны либо разделить приглашение на первое и последнее, как показано в ответе Итчидона, или вы можете использовать разрешение неоднозначных имен (ANR), что позволит вам выполнять поиск по полному имени. Это выглядело бы примерно так:

$Names = Read-Host "Enter the name"
$Usernames = 
    Get-ADUser -LDAPFilter "(anr=$Names)" -Properties 'SamAccountName' |
        Select-Object -ExpandProperty 'SamAccountName'

Поиск по имени и фамилии никогда не является точной наукой, поскольку в вашей организации может быть несколько человек с одинаковыми именами, но ANR делает это немного хуже потому что это «содержит» вид поиска. Поэтому, если вы ищете мое имя, например, «Габриэль Люси», вы также найдете «Габриэле Лучано».

Это зависит только от вашего использования. Если ваш пользователь будет выбирать правильную учетную запись, то ANR - это простой способ найти учетные записи. Но если это часть некоторой автоматизации, где вы хотите точно сопоставить имена, вам придется разделить имя и фамилию на входе и искать точные совпадения.

0 голосов
/ 29 марта 2020

Не уверен, почему вы использовали переменную конвейера, когда вы никуда не берете данные. Также в AD пользовательский объект «Имя» называется «Имя», а «Фамилия» называется «Фамилия». Если вы принимаете входные данные из CSV, как это:

FirstName,LastName,
xxx,xxx,
...

, попробуйте это:

$usernames = Import-Csv "filepath.csv" -Header GivenName,Surname -Delimiter "," | ForEach {
  Get-ADUser -Filter {GivenName -like $_.GivenName -and Surname -like $_.Surname} | Select-Object -ExpandProperty sAMaccountName 
}
...