我试图使用PowerShell脚本来询问名称和姓氏,然后显示我尝试过的samAccountname,但它不起作用。
$Names = Read-host "Jack Robinson"
$Usernames =
Get-ADUser -Filter "FirstName -eq $($_.FirstName) -and Surname -eq $($_.LastName)" -Properties 'SamAccountName' |
Select-Object -ExpandProperty 'SamAccountName'
答案 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是查找帐户的简便方法。但是,如果这是自动化操作的一部分,您希望精确匹配名称,那么您将不得不在输入中拆分名字和姓氏并搜索完全匹配。