【发布时间】:2023-03-18 23:33:01
【问题描述】:
我的 Active Directory 有问题。
这是场景:
- 我必须对用户集执行一些查询。
- 我无法使用图形工具,只能使用 Power Shell。
- 这些用户列在 csv 中,每行一个。
- 对于那些用户,我没有
SamAccountName,而是Name字段,所以他们的名字和姓氏。
因此,我必须将此集合作为查询的输入。 我在 google 上搜索,发现这个链接对大多数基本查询非常有用: http://woshub.com/get-aduser-getting-active-directory-users-data-via-powershell/
在这里,或多或少的半页,我发现了一些对我有用的东西:
任务:用于存储在文本文件中的帐户列表(一个 每行帐户),您需要从 AD 中获取用户的公司名称和 将其保存为 CSV 文件(您可以轻松将此文件导入 Excel)。
Import-Csv c:\ps\users_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, Company |
Select Name, Company |
Export-CSV c:\ps\users_ad_list.csv -Append -Encoding UTF8
}
因此,我尝试转换此查询以满足我的需要。比如我不需要公司,但是UserPrincipalName和SamAccountname。
关键是当我执行查询时,我在 -Identity 参数上得到了一个错误:
Get-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null or an element of the argument collection contains a null value.
所以,我再次在谷歌上搜索,但没有找到解决方案;我只发现问题与使用$_.users 变量有关。
所以,我有两个问题:
- 上面的代码有什么问题?
- 我发现许多示例都将
SamAccountName列表作为输入文件。如果列表中填充了其他值,例如地雷,我是否应该更改代码中的某些内容?
编辑:根据要求,我与您分享我的几行 csv。出于安全和隐私原因,名称当然会更改。
Mickey Mouse
Donald Duck
Scrooge McDuck
等等。因此,该列充满了人的姓名和姓氏。
我想知道:在其他领域使用这种语法可能有问题吗?
我的意思是,在我的例子中,名字和姓氏不仅用于Name 字段,还用于其他两个字段:DisplayName 和另一个我不记得确切的字段。这可能是根本原因吗?
【问题讨论】:
-
您提到 CSV 文件只有一个
Name列 - 但您引用了$_.user。尝试Get-ADUser -LDAPFilter "(ANR=$($_.Name))"改为根据名称进行搜索 -
嗨@MathiasR.Jessen,感谢您的建议。我不知道我的提示是否表现良好:我将查询更改为:
Import-Csv <path file> | ForEach {Get-ADUser -LDAPFilter "(ANR=$($_.Name))" -Properties * |Select SamAccountName, UserPrincipalName | Export-CSV <path file> -Append -Encoding UTF8}但现在我有错误The search filter cannot be recognized;我错了什么? -
如果
$_.Name解析为空字符串,就会出现这种情况——这表明Name也可能不是正确的列名?你能update your post 告诉我们原始 CSV 文件的前几行吗? -
当然,我会的。当然,出于隐私原因,名称会更改。
-
所以您的 CSV 文件实际上并不是一个 CSV 文件 - 它只是一个名称列表,每个名称各占一行? :)
标签: powershell input active-directory