从名字和姓氏获取samaccountname

时间:2020-03-29 06:50:53

标签: powershell active-directory

我试图使用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 个答案:

答案 0 :(得分:1)

关于从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'

答案 1 :(得分:0)

不确定从何处获取输入时为何使用管道变量。同样在AD用户对象中,名字被称为GivenName,姓氏被称为Surname。如果您要像这样从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 
}

答案 2 :(得分:0)

我认为“杰克·罗宾逊”应该是示例输入。有了提示,即提示Read-Host向用户显示。您可能想要这样的东西:

$Names = Read-Host "Enter the name"

基于空格分隔姓氏和名字绝不是万无一失的,尤其是在两个或三个单词的姓氏的情况下。因此,您应该将提示分为开头和结尾,例如Itchydon的答案显示,也可以使用ambiguous name resolution(ANR),这样可以按全名进行搜索。看起来像这样:

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

按姓氏和名字进行搜索绝不是一门精确的科学,因为您的组织中可能有多个同名人员,但是ANR确实使搜索结果更糟,因为它进行的是“包含”搜索。因此,例如,如果搜索我的名字“ Gabriel Luci”,那么您还会找到“ Gabriele Luciano”。

这取决于您的使用。如果您的用户将选择正确的帐户,则ANR是查找帐户的简便方法。但是,如果这是自动化操作的一部分,您希望精确匹配名称,那么您将不得不在输入中拆分名字和姓氏并搜索完全匹配。