【问题标题】:Active Directory query on Power Shell with input file带有输入文件的 Powershell 上的 Active Directory 查询
【发布时间】:2023-03-18 23:33:01
【问题描述】:

我的 Active Directory 有问题。

这是场景:

  1. 我必须对用户集执行一些查询。
  2. 我无法使用图形工具,只能使用 Power Shell。
  3. 这些用户列在 csv 中,每行一个。
  4. 对于那些用户,我没有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
}

因此,我尝试转换此查询以满足我的需要。比如我不需要公司,但是UserPrincipalNameSamAccountname

关键是当我执行查询时,我在 -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 变量有关。

所以,我有两个问题:

  1. 上面的代码有什么问题?
  2. 我发现许多示例都将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


【解决方案1】:

感谢@Mathias R. Jessen 解决。建议是否有效:由于我有一个文件,其中有一列填充了 qith 姓名和姓氏,

Get-Content C:\ps\users_list.csv |ForEach-Object { Get-ADUser -LDAPFilter "(ANR=$_)"

是一个有效的语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2015-04-29
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    相关资源
    最近更新 更多