【问题标题】:Keep DC part of distinguished name保留专有名称的 DC 部分
【发布时间】:2016-01-06 16:25:42
【问题描述】:

我有如下输入专有名称:

CN=A00.user,OU=MyOU,OU=A00,OU=MyOU3,DC=my,DC=domain
CN=A01.user1,OU=MyOU1,OU-MyOU2,OU=A00,OU=MyOU3,DC=my,DC=first,DC=domain

我只需要打印 DC 部分,就可以得到如下输出:

my.domain
我的.first.domain

看起来拆分或替换应该可以工作,但我无法弄清楚语法。

【问题讨论】:

    标签: powershell distinguishedname


    【解决方案1】:

    您可以将Get-ADPathname.ps1-Split 参数一起使用,Select-String 与正则表达式一起使用,以及-join 运算符:

    (
      Get-ADPathname 'CN=A01.user1,OU=MyOU1,OU-MyOU2,OU=A00,OU=MyOU3,DC=my,DC=first,DC=domain' -Split | Select-String '^DC=(.+)' | ForEach-Object {
        $_.Matches[0].Groups[1].Value
      }
    ) -join '.'
    

    输出:

    my.first.domain
    

    【讨论】:

    • 看起来很不错的剧本比尔,如果我需要更多地处理专有名称,我一定会看一看。谢谢
    【解决方案2】:

    这里有一个快速而肮脏的方法来完成它。

    ("CN=A00.user,OU=MyOU,OU=A00,OU=MyOU3,DC=my,DC=domain " -split "," | 
    Where-Object { $_.StartsWith("DC=") } | 
    ForEach-Object { $_.Replace("DC=","")}) -join "."
    

    生产 我的域名

    【讨论】:

    • 确实如此。我不知道 DN 的名称中可以有逗号,除了分隔 CN、OU 和 DN。
    • 在我的工作网络中,逗号是命名标准的必需部分。
    • 谢谢比尔。您能否粘贴一个示例,说明它可能对我有利吗?
    • 我总是推荐使用 Pathname 对象来解析 AD 路径,这就是 Get-ADPathname.ps1 脚本的作用(见我的回答)。
    • 有趣。我在您的示例中使用了 DN,我的脚本将其拆分得很好。可能我理解错了。
    【解决方案3】:

    我会简单地删除所有内容,包括第一个 ,DC=,然后用点替换剩余的 ,DC=

    $dn = 'CN=A00.user,OU=MyOU,OU=A00,OU=MyOU3,DC=my,DC=domain',
          'CN=A01.user1,OU=MyOU1,OU-MyOU2,OU=A00,OU=MyOU3,DC=my,DC=first,DC=domain'
    
    $dn -replace '^.*?,dc=' -replace ',dc=', '.'
    

    【讨论】:

    • 希望没有 distinctName 组件包含字符串 ,DC=(你永远不会知道,我见过一些奇怪的对象名称......)。
    • 谁在他们的名字组件中添加了一个字符串,DC= 应该承受任何痛苦。
    • 也许,但将它放在名称组件中仍然是合法的,并且在 IMO 中,脚本应该足够健壮,可以处理所有合法名称。这就是为什么我总是推荐使用Pathname 对象。
    • 根据Richard L. Mueller= 必须被转义,这意味着序列,DC= 只能出现在根DN 中。 (more complete version)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2022-11-17
    • 2014-01-07
    • 2015-02-01
    • 2018-01-22
    • 2022-08-26
    相关资源
    最近更新 更多