AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 39056
Accepted
Ana Betts
Ana Betts
Asked: 2009-07-11 09:54:26 +0800 CST2009-07-11 09:54:26 +0800 CST 2009-07-11 09:54:26 +0800 CST

Powershell对值与数组的作用不同?

  • 772

我正在尝试使用 Powershell 从 Active Directory 中获取一些信息,但我遇到了一些奇怪的行为。这是我的脚本:

$toFind = ( 'bobjones', 'samsmith' )

filter Get-AdUser {
    $strFilter = "(&(objectCategory=User)(sAMAccountName=$_))"

    $objDomain = New-Object System.DirectoryServices.DirectoryEntry
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.SearchRoot = $objDomain
    $objSearcher.PageSize = 1000
    $objSearcher.Filter = $strFilter

    $colProplist = ("name", "department")
    foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}

    ($objSearcher.FindAll() | %{$_.Properties})
}

"paul" | get-aduser # Works
$toFind | get-aduser # Doesn't work?!

前者打印出我所期望的,一个属性表;后者最终只是反复打印“0 1”,但我不知道为什么。为什么单一案例可以工作,而不是数组?

powershell
  • 5 5 个回答
  • 486 Views

5 个回答

  • Voted
  1. Marcus
    2009-07-11T10:26:51+08:002009-07-11T10:26:51+08:00

    您可能必须指定一个 foreach 循环,例如 foreach ($user in $toFind) { get-aduser $user }

    如果您只是在提示符处键入 $toFind 会发生什么?我假设它会列出两个名称,每行一个,就像它应该的那样。

    我尝试对我的 AD 运行相同的代码并得到以下结果:0 1

    名称值 ---- ----- 名称 {Sahnti L. Aphil} adspath {LDAP://CN=Sahnti L. Aphil,OU=Users,OU=Jackson,DC=company,DC=local} 0 1 名称{Hamong Justice} 广告路径 {LDAP://CN=Hamong Justice,OU=Users,OU=Jackson,DC=company,DC=local}

    • 0
  2. Trondh
    2009-07-11T10:33:01+08:002009-07-11T10:33:01+08:00

    只是一个旁注:我强烈建议查看 Quest AD cmdlet 包 ( http://www.quest.com/powershell/activeroles-server.aspx ) 以了解所有与 AD 相关的 powershell 内容。它填补了一个漏洞,因为 powershell 中的内置 AD 支持非常糟糕。它将为您节省大量的开发时间。

    • 0
  3. Ana Betts
    2009-07-11T10:35:32+08:002009-07-11T10:35:32+08:00

    想通了,它与PowerShell无关。创建 DirectoryEntry 时:

    $objDomain = New-Object System.DirectoryServices.DirectoryEntry
    

    它只会为您的域返回结果(即,如果您有一个像“NorthAmerica”和“Europe”这样的 AD 森林,它只会查询您所在的那个)。碰巧我正在搜索的所有名称都在另一个域中。

    如果您使用构造函数手动指定域,它工作得很好(虽然还没有弄清楚如何查询所有域......)

    • 0
  4. Best Answer
    Helvick
    2009-07-12T10:05:36+08:002009-07-12T10:05:36+08:00

    您要做的是查询全局目录,因为您要搜索整个森林。有几种方法,但最简单的方法是将搜索根更改为 GC。例如

    $objSearcher.SearchRoot = [ADSI]"GC://$($objDomain.Name)" 
    

    或者,您可以查询森林,然后向它询问全局目录列表,并将其中一个用作初始目录条目,但这是一个足够简单的更改,只要您正在搜索的字段位于 GC 中,它就可以满足您的需求。在您的情况下,搜索部分应该不是问题,因为您正在按默认情况下是全局的用户名进行搜索,但您不会从搜索结果结果中获取部门字段,因为部门默认情况下不是全局的。要获得它,您将需要使用搜索结果中的专有名称对完整 AD 用户对象的用户域进行后续 AD 查找,然后将部门拉出。您可以更改您的架构,以便 Department 是全球性的,但这会有点激进 IMO。

    您可以在此处找到默认全局属性的完整列表。

    • 0
  5. Poshoholic
    2009-07-16T19:09:50+08:002009-07-16T19:09:50+08:00

    仅供参考,您获得 0 和 1 输出的原因是因为对 $objSearcher.PropertiesToLoad.Add() 的调用返回了添加的属性的索引(第一个属性为 0,第二个属性为 1)。对于脚本中的每个用户,这将发生一次。您可以通过将返回值传递给 Out-Null 来抑制返回值。

    • 0

相关问题

  • Windows Powershell Vim 键绑定

  • 如何使用 PowerShell 清除 Exchange 邮件队列

  • 获取目录总大小的 PowerShell 脚本

  • Sharepoint 2007 的 Powershell 提供程序

  • 如何授予对 Exchange 2007 中每个人的日历的访问权限?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve