我需要从专有名称中获取第一个 OU
I need to get the first OU from a Distinguishedname
我有这个 PS 查询来获取服务器的可分辨名称:
$AD = get-adcomputer -filter {OperatingSystem -like '*Server*' -and OperatingSystem -notlike '*2003*'} -property name, description, DistinguishedName | Select name, description, DistinguishedName
并且我想获取 OU 的第一个实例,所以我想要 "OU=Web Servers"
CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,etc
我该怎么做?谢谢
如果拆分 DN 字符串并使用逗号作为分隔符,则 OU 将是数组中的第二个元素。
然后可以使用方括号返回它以访问数组的单个元素。因为它是我们使用 [1] 访问它的第二个元素,因为 [0] 是第一个元素。
$DN = "CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,DC=This,DC=Com"
$DN.Split(",")[1]
通过逗号分隔来解析 DN 是一种相当普遍的做法,但可能不可靠,因为名称可能包含嵌入的逗号(它们将用反斜杠转义)。这里有一个正则表达式的解决方案,应该比较靠谱:
$dn = 'CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,DC=domaain,DC=com'
$OU = $dn -replace '.+?,OU=(.+?),(?:OU|DC)=.+',''
$OU
Web Servers
仅当第一个元素不是 OU 时,提供的正则表达式解决方案才有效。这是一个适用于任何场景的解决方案,并且对于 non-regex 类型更具可读性。
如果您有以下示例,则按“,”拆分或正则表达式解决方案将分别 return '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]
我有这个 PS 查询来获取服务器的可分辨名称:
$AD = get-adcomputer -filter {OperatingSystem -like '*Server*' -and OperatingSystem -notlike '*2003*'} -property name, description, DistinguishedName | Select name, description, DistinguishedName
并且我想获取 OU 的第一个实例,所以我想要 "OU=Web Servers"
CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,etc
我该怎么做?谢谢
如果拆分 DN 字符串并使用逗号作为分隔符,则 OU 将是数组中的第二个元素。
然后可以使用方括号返回它以访问数组的单个元素。因为它是我们使用 [1] 访问它的第二个元素,因为 [0] 是第一个元素。
$DN = "CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,DC=This,DC=Com"
$DN.Split(",")[1]
通过逗号分隔来解析 DN 是一种相当普遍的做法,但可能不可靠,因为名称可能包含嵌入的逗号(它们将用反斜杠转义)。这里有一个正则表达式的解决方案,应该比较靠谱:
$dn = 'CN=Server1,OU=Web Servers,OU=Servers,OU=HeadOffice Servers,DC=domaain,DC=com'
$OU = $dn -replace '.+?,OU=(.+?),(?:OU|DC)=.+',''
$OU
Web Servers
仅当第一个元素不是 OU 时,提供的正则表达式解决方案才有效。这是一个适用于任何场景的解决方案,并且对于 non-regex 类型更具可读性。 如果您有以下示例,则按“,”拆分或正则表达式解决方案将分别 return '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]