【问题标题】:Compare AD users from CSV to a specific OU将 CSV 中的 AD 用户与特定 OU 进行比较
【发布时间】:2017-11-07 18:21:06
【问题描述】:

我有一个来自整个域的用户名的 CSV 列表,我正在尝试将该列表与特定 OU 进行比较,并将匹配项发送到另一个文件。我是 powershell 的新手,所以经过大量研究并与其他脚本比较后,我想出了这个:

$users = Import-csv C:\Users\me\Desktop\'RSA.csv' 
$(ForEach ($user in $users) 
{
Get-AdUser -identity $user -SearchBase "ou=Sub,ou=Root,dc=My,dc=Domain,dc=Name" -Filter * 
}) |
Select-Object SamAccountName |
Export-CSV -Path C:\Users\me\Downloads\test\output.csv -NoTypeInformation 

当我运行它时,我收到错误“Get-ADUser : Cannot validate argument on parameter 'Identity'. The Identity property on the argument 为空或为空。”如果我在没有 -identity $user 的情况下运行,它只会拉取所有内容。关于如何使其工作的任何建议?

【问题讨论】:

  • 您是否尝试过打印$user 变量以确保它包含某些内容?
  • 是的,当我在 $user 上使用 Write-Output 时,它会打印所有用户名。
  • 我有一个,所以我删除了它,但得到了相同的结果。
  • 您的 csv 中的用户名列上是否有标题?如果有,它叫什么名字?
  • 我愿意,标题是用户名。有一次,我在“Import-CSV”之后添加了“| 选择用户名”,但这并没有改变任何东西,所以我把它拿出来了。

标签: powershell csv active-directory ou


【解决方案1】:

当您调用 Get-ADUser 而不是给它一个仅包含用户名的字符串时,您正在传递一个具有名为 username 的属性的对象。您可以使用 Select-Object -ExpandProperty Username 或引用 just 属性。

Import-Csv 'C:\Users\me\Desktop\RSA.csv' | 
    Where-Object {(!([string]::IsNullorWhiteSpace($_.UserName)))} |
    ForEach-Object {
        Get-ADUser -Identity $_.UserName
    } |
    Select-Object SamAccountName |
    Export-CSV -Path C:\Users\me\Downloads\test\output.csv -NoTypeInformation 

注意:为了便于阅读,已更改为 ForEach-Object 循环,因为它看起来像您尝试主要使用管道的地方。还添加了一个测试以跳过空白行或空白/空字符串的用户名。删除了SearchBaseFilter,因为您基于身份进行查找不能使用命令中的那些。因为没有允许您使用所有参数的参数集。 Get-Help Get-ADUser 显示可用的参数集。

【讨论】:

  • $_.UserName 是引用列标题还是其他属性?我运行您的编辑并得到一个新错误,“无法使用指定的命名参数解析参数集”。这是否意味着我的 CSV 中的用户名列表有问题?
  • @cd19 是的,它正在引用该标题,当您使用 Import-Csv 时,会创建一个 PowerShell 对象数组,其中包含列标题的属性。
  • @cd19 不,很确定你不能同时使用IdentitySearchBase。由于身份是唯一的,所以 SearchBase 无关紧要
  • 我在某处看到这可能是一个问题,所以我尝试取出 Searchbase,但它仍然无法解析参数集。
  • @cd19 您还需要删除-filter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
相关资源
最近更新 更多