我有一个名称列表,我需要为此输入AD用户名,该列表的格式与AD中的显示名称相同。
我运行了以下代码
Get-Content c:\test\users.txt |
Foreach-Object {Get-ADUser -filter "displayName -like '$($_)'" |
Select-Object SamAccountName,name} |
Export-Csv c:\test\output1.csv
这会输出一个用户名和名称列表,但是只会输出成功的名称解析。
我想做的是能够列出要验证的名称。这可能由于两个原因而返回错误:
例如
input.txt
将是显示名称格式的名称列表。
我想要的输出:
Original Input Exists in AD Username Name 1 True Username1 Name 2 True Username2 etc. False Check
在此先感谢
答案 0 :(得分:1)
您可以在管道中创建一个自定义对象。另外,使用LDAP过滤器anr
(歧义名称解析)可能更适合名称列表,因为它会查找用户的多个属性以查找匹配项。
解决方案可能是这样的:
Get-Content "C:\test\users.txt" |
Foreach-Object {$user=get-aduser -ldapfilter "(anr=$_)"; `
[PSCustomObject]@{Name=$_; Username=$user.samaccountname; Exists=&{$user -ne $null}}} |
Export-Csv "c:\test\output1.csv"
答案 1 :(得分:0)
您必须测试是否从Get-ADUser
返回了某些内容,如果什么都没做,请执行其他操作。
我认为这应该可以满足您的需求,但是您可能需要对其进行调整:
Get-Content c:\test\users.txt | Foreach-Object {
$user = Get-ADUser -filter "displayName -like '$($_)'" -Properties DisplayName,SamAccountName,Name
if ($user) {
$user | Select-Object DisplayName,SamAccountName,Name
} else {
$_ | Select-Object @{Label="DisplayName";Expression={"$_"}},@{Label="SamAccountName";Expression={""}},@{Label="Name";Expression={""}}
}
} |export-csv c:\test\output1.csv
如果未找到任何内容,则只会输出文件中的显示名称。 Label=
和Expression=
表示法的全部目的是确保其输出的属性与找到 时输出的属性相同,因此可以将列表全部放在一起。
答案 2 :(得分:0)
使用Join-Object
cmdlet中的PowerShell Gallery:
Get-Content .\Users.txt | ForEach {[PSCustomObject]@{Name=$_; InList=$True}} |
FullJoin (Import-Csv .\output1.csv) Name
将输出类似:
Name InList SamAccountName
---- ------ --------------
name1 True Sam1
name2 True
name5 True Sam5
Name3 Sam3