Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell从Active Directory中的Managedby属性获取城市名称和人名_Powershell - Fatal编程技术网

PowerShell从Active Directory中的Managedby属性获取城市名称和人名

PowerShell从Active Directory中的Managedby属性获取城市名称和人名,powershell,Powershell,谁能帮我做这个吗。我需要从Active Directory中的managedby属性派生城市名称和个人全名,如下所示: CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com 所以我需要把所有东西都拿出来,留给马利,鲍勃·帕里斯 我能说出巴黎的名字,但不能说出全名: 这将在输出中产生巴黎: CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' | %{(($_ -split ',')[-3] -sp

谁能帮我做这个吗。我需要从Active Directory中的managedby属性派生城市名称和个人全名,如下所示:

CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com
所以我需要把所有东西都拿出来,留给马利,鲍勃·帕里斯

我能说出巴黎的名字,但不能说出全名:

这将在输出中产生巴黎:

CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' | %{(($_ -split ',')[-3] -split '=')[1]}

有人能帮我提取全名吗?

在您的示例中,您当然可以提取字符串的城市和名称

'CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' | %{(($_ -split ',OU',2)[0] -split '=')[1] -replace '\\'}
但由于它是一个对象的可区分名称,我认为最好在AD中检索该对象以获得该信息

$DN="CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com"
$object = New-Object System.DirectoryServices.DirectoryEntry "LDAP://$DN"
$name=$object.Properties.cn
$city=$object.Properties.l

您可以将DifferentizedName拆分为单独的RDN RelativeDifferentingUIshedName组件,然后从中选择所需的部分

'CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -split ',\s*(?<!\\,\s*)'
它捕获第一次出现的op CN=,在backreference 1$1中必须后跟,OU=。 接下来,它捕获第二次出现的OU=,在backreference 2$2中必须后跟,DC=


简言之:如果你的OU结构发生变化,这将不再有效

我不知道是什么命令让你得到了这个输出,但是试着选择'name'、'city'或类似thatHi Neko的东西,字符串是'CN=Marley\,Bob,OU=Users,OU=PARIS,DC=Domain,DC=com',它通过foreach对象循环来去除不需要的字符,这种情况下,您考虑将其设置为json文件还是变量?这将使它变得更容易感谢Mikel,这个用例是一个一行的单遍广告。计算机对象唯一给出位置和用户名的属性是由ManagedBy管理的,所以我希望通过删除其他字符来提取ciry和全名。感谢Theo,它分两行工作,提供所需输出的第二条线路。我会试着把它缝在一起。谢谢@IanB虽然我不会真的推荐它,因为DNs可以有很多部分,但我已经为您添加了一个单行程序的替代方案。谢谢Theo!那太好了!我知道你的观点,如果OU结构也改变了。@ IanB,如果你觉得我的答案解决了你的问题,请考虑通过点击接受答案。✓ 左边的图标。看见这将帮助其他有类似问题的人更容易地找到它。 CN=Marley\, Bob OU=Users OU=PARIS DC=Domain DC=com
$rdn = 'CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -split ',\s*(?<!\\,\s*)'
'{0} {1}' -f (($rdn[0] -split '=')[1] -replace '\\'), (($rdn[2] -split '=')[1])
'CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -replace '\\' -replace 'CN=(.+),OU=.+OU=(.+)(,DC=.*){2,}$', '$1 $2'