【问题标题】:Get-AdUser Cannot convert to the type system.stringGet-AdUser 无法转换为 system.string 类型
【发布时间】:2019-11-20 22:23:17
【问题描述】:

我正在尝试运行下面的 get-aduser 查询,但不断收到错误 Get-AdUser 无法转换为 system.string 类型。知道可能是什么问题吗? TIA

$Base = (Get-ADOrganizationalUnit -Filter {(Name -like "Department")}).DistinguishedName

Get-ADUser -Filter *  -SearchBase $Base -Properties Name

【问题讨论】:

  • 我猜测,$base 是一个 OU 名称数组,而不是单个 OU 名称。 -SearchBase 需要单个字符串而不是集合。检查$base 的内容以确保。如果它是一个数组,那么您将需要使用一些循环结构一次处理一个,或者改进您的过滤器以获得您想要的。

标签: powershell active-directory


【解决方案1】:

我对此进行了测试,我可以确认,如果您对Get-ADOrganizationalUnit 的调用返回多个OU,那么DistinguishedName 属性将是一个数组而不是纯字符串。因此,您需要将调用更改为 Get-ADOrganizationalUnit,以便它只返回一个。

您可以通过使用-ResultSetSize 参数仅使用第一个结果来做到这一点:

$Base = (Get-ADOrganizationalUnit -Filter {(Name -like "Department")} -ResultSetSize 1).DistinguishedName

或者更改Filter 使其仅匹配一个OU。我假设您使用的是-like,因为您在实际代码中使用了通配符,所以您可能只需要更具体。

更新:如果你想要来自所有匹配的 OU 的用户,那么你可以使用ForEach-Object

Get-ADOrganizationalUnit -Filter {(Name -like "Department")} |
    ForEach {
        Get-ADUser -Filter *  -SearchBase $_.DistinguishedName -Properties Name
    }

【讨论】:

  • 谢谢,我有大约 5 个 OU 需要处理。结果集大小只会做 1 个 OU 吗?
  • 是的。您是否试图从所有 5 个用户中获取用户?
  • 是的,尽可能准确
  • 很简单。我用如何做到这一点更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2020-10-21
  • 2012-09-07
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
  • 2014-03-14
  • 2017-11-24
相关资源
最近更新 更多