在Powershell中运行以下内容我得到以下结果。
Get-ADUser -Filter * -Properties DistinguishedName | select DistinguishedName | Select-Object -Property @{label='Result';expression={$_.DistinguishedName}}
结果
CN=User Full Name 1,OU=AMS,OU=DS,DC=domain,DC=local
CN=User Full Name 2,OU=TECHM,OU=DS,DC=domain,DC=local
CN=User Full Name 3,OU=Agencies,OU=HK,OU=Developers,DC=domain,DC=local
CN=User Full Name 4,OU=Agencies,OU=CH,OU=Developers,DC=domain,DC=local
CN=User Full Name 5,OU=Agencies,OU=US,OU=Developers,DC=domain,DC=local
CN=User Full Name 6,OU=Market,OU=PP,OU=Developers,DC=domain,DC=local
CN=User Full Name 7,OU=Market,OU=HK,OU=Developers,DC=domain,DC=local
这是我在Active Directory中的OU
DS
AMS
TECHM
Developers
CH
Agencies
Market
HK
Agencies
Market
我需要一种方法来调整这个查询(进行拆分或其他),这样我就可以获得第三项(逗号分隔) - 最重要的 - 从结尾和第4和第5。这是我想得到的输出:
OU Where Type
--------------------------------
DS AMS N/A
DS TECHM N/A
Developers CH Agencies
Developers CH Market
Developers HK Agencies
Developers HK Market
我找到了一些分裂字符串的例子,但没有什么可以完成我在这里尝试的东西。
有什么想法吗?!
非常感谢任何帮助。提前谢谢!
答案 0 :(得分:1)
考虑到您想要提取的值,我从CanonicalName开始,而不是DistinguishedName:
Get-ADUser -Filter * -Properties CanonicalName |
select -ExpandProperty CanonicalName |
ForEach-Object {
$Parts = $_.split('/')
$Object =
[PSCustomObject]@{
OU = $Parts[1]
Where = $Parts[2]
Type = 'N/A'
}
if ($Parts.count -ge 5)
{ $Object.Type = $Parts[3] }
$Object
}
答案 1 :(得分:0)
您对“,DC = domain,DC = local”不感兴趣,因此您也可以通过-replace“,DC = domain,DC = local”,“”或使用字符串的子字符串方法将它们删除
你真的不需要最后一个select-object,也没有指定DistinguishedName,因为默认情况下你可以使用get-aduser
例如
$users = (get-aduser -filter *).distinguishedname -replace ",DC=domain,DC=local",""
然后,使用“,”将结果拆分为临时数组变量,并从最后一个使用数组索引[-1]
获取您喜欢的结果$users | foreach {$where = $type = $OU = ""}{
$temp=@($_ -split ",")
if ($temp.count -eq 1) {
$OU = $temp[0].substring(3) # substring to remove the first 3 chars, that is OU= or CN=
} elseif ($temp.count -eq 2) {
$where = $temp[1].substring(3)
$OU = $temp[0].substring(3)
} else {
$type = $temp[-1].substring(3)
$where = $temp[-2].substring(3)
$ou = $temp[-3].substring(3)
}
# Finally create a custom obhect out of these
[PSCustomObject]@{
Type=$Type
Where=$where
OU=$OU
}
}
我正在打字,我应该测试,但我想你明白了......