使用以下函数(比较 2 个用户的组成员身份)时,我得到的结果毫无意义。

function Compare-ADUserGroups <br>
{  #requires -pssnapin Quest.ActiveRoles.ADManagement
    param (
        [string] $FirstUser = $(Throw "logonname required."),
        [string] $SecondUser = $(Throw "logonname required.")
    )

    $a = (Get-QADUser $FirstUser).MemberOf
    $b = (Get-QADUser $SecondUser).MemberOf
    $c = Compare-Object -referenceObject $a -differenceObject $b
    $c | Sort-Object InputObject
}

当我调用这个 (Compare-ADUserGroups User1 User2) 时,我得到一个类似于以下的结果集:
  • CN=[所有用户],OU=adm,DC=OSUMC,DC=EDU
  • CN=[所有用户],OU=adm,DC=OSUMC,DC=EDU =>
  • CN=扩展用户,OU=MSG,DC=OSUMC,DC=EDU
  • CN=扩展用户,OU=MSG,DC=OSUMC,DC=EDU =>
  • CN=LCS2005,OU=分发列表,DC=OSUMC,DC=EDU
  • CN=LCS2005,OU=分发列表,DC=OSUMC,DC=EDU =>

  • 我希望这些不会显示,因为它们是相等的,而且我没有使用 -IncludeEqual 参数。关于为什么会出现这些的任何想法?

    最佳答案

    他们中有一些东西正在抛弃比较。如果你运行,你会看到类似的东西......

    获取进程|导出clixml c\procs.xml
    差异 (get-process) (import-clixml c:\procs.xml)

    因为这些对象的某些属性(例如 VM 和 PM)会在两次 Get-Process 运行之间的短暂间隔中发生变化。因此,您可能会遇到类似的情况,即两个对象之间的某些属性不同。默认情况下,比较对象查看每个属性。

    另一种方法是使用 Compare-Object 的 -property 参数只比较特定的属性,而不是比较整个对象。在这方面,比较对象肯定有点棘手,因为它处理对象属性的方式而不是简单地处理文本。

    关于powershell - AD 组比较 - PowerShell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/349822/

    10-13 09:01