如何将LDAP字符串的一部分抓取到变量中(Powershell)

时间:2016-02-11 19:55:11

标签: powershell

我能够将完整的LDAP路径转换为变量$ strPath,它将返回如下结果:

  

LDAP:// CN =计算机名,OU =市,OU =服务器,OU = ###,DC = DOM,DC = AIN,DC = COM   或者在其他位置它看起来像:   LDAP:// CN =计算机名,OU =服务器,OU = ##,DC = DOM,DC = AIN,DC = COM

我想只返回##,###或####值(可以是两个,三个或四个字符),这是我们的地区代码。

因此,某些计算机对象在其LDAP字符串中具有城市名称,而其他计算机对象则没有(取决于区域的大小),并且区域代码可以是两个,三个或四个字符长。

我猜我想要做一些事情,比如查找文字“服务器,OU =”并删除包括之前的所有内容,并删除文字“,DC = dom,DC = ain,DC = com“来获取我的最终变量。

提前致谢!

2 个答案:

答案 0 :(得分:1)

请查看本文中的Get-ADPathname.ps1脚本:

Use PowerShell to Handle Active Directory Paths

对于您的第一个示例,OU代码是右侧的第4个元素:

LDAP://CN=computername,OU=City,OU=Servers,OU=###,DC=dom,DC=ain,DC=com

例如,你可以这样写:

(Get-ADPathname LDAP://CN=computername,OU=City,OU=Servers,OU=###,DC=dom,DC=ain,DC=com" -Split -ValuesOnly)[-4]

-Split参数将LDAP路径拆分为数组,-ValuesOnly省略CN=OU=DC=等。{{1 }表示“从数组末尾返回第4个元素。”

答案 1 :(得分:0)

这样的事情怎么样:

$ldapString = "LDAP://CN=computername,OU=Servers,OU=##,DC=dom,DC=ain,DC=com"
$temp = $ldapString.Split(",=")
$districtCode = $temp[[array]::IndexOf($temp,"DC") - 1]

它适用于两者而且没有额外的进口。只要您没有区号和#34; DC"。