我有这个PS查询来获取服务器的专有名称:
$AD = get-adcomputer -filter {OperatingSystem -like '*Server*' -and OperatingSystem -notlike '*2003*'} -property name, description, DistinguishedName | Select name, description, DistinguishedName
我希望获得OU的第一个实例,所以我想要" OU = Web服务器"
CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,etc
我该怎么做?感谢
答案 0 :(得分:1)
通过在逗号上拆分来解析DN是一种相当普遍的做法,但可能不可靠,因为名称可能包含嵌入的逗号(它们将使用反斜杠进行转义)。这是一个应该更可靠的正则表达式解决方案:
$dn = 'CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,DC=domaain,DC=com'
$OU = $dn -replace '.+?,OU=(.+?),(?:OU|DC)=.+','$1'
$OU
Web Servers
答案 1 :(得分:0)
如果拆分DN字符串并使用逗号作为分隔符,则OU将成为数组中的第二个元素。
然后可以使用方括号返回,以访问数组的单个元素。因为它是第二个元素,我们使用[1]来访问它,因为[0]是第一个元素。
$DN = "CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,DC=This,DC=Com"
$DN.Split(",")[1]
答案 2 :(得分:0)
仅当第一个元素不是OU时,提供的正则表达式解决方案才有效。这是一个可以在任何情况下使用的解决方案,并且对于非正则表达式类型更易读。 如果您有以下示例,则用“,”分割,否则正则表达式解决方案将分别返回“ OU = Servers”和“ Servers”(我假设您要从字符串中删除OU =)
$dn = 'OU=Web Servers,OU=Servers,OU=HeadOffice Servers,DC=domaain,DC=com'
($dn -split 'OU=|,OU=')[1]
如果您没有嵌套的OU,则可能需要添加一些其他逻辑
(($dn -split 'OU=|,OU=')[1] -split ',')[0]