我的问题是如何在powershell中分割从命令行提示的内容 我想在我的服务器上找到所有OU的路径,以便稍后我可以使用它们。
get-aduser -Filter * | Select DistinguishedName | findstr "OU="
OUTPUT
CN=Username1,OU=firma1,DC=bc,DC=local
CN=Username2,OU=firma2,DC=ad,DC=local
and I want only
OU=firma1,DC=bc,DC=local
OU=firma2,DC=ad,DC=local
答案 0 :(得分:1)
这应该有效:
Get-ADUser -Filter * |
Where-Object { $_.DistinguishedName.IndexOf('OU=') -gt 0 } |
ForEach-Object { $_.DistinguishedName.Substring($_.DistinguishedName.IndexOf('OU=')) }
此代码过滤掉OU中不包含的任何对象,其中包括Users
内置容器中的对象,如CN=Administrator,CN=Users,DC=bc,DC=local
。您还可以使用if
中的ForEach-Object
语句处理这些用户。
答案 1 :(得分:1)
如何直接使用.NET String.Split
method
Get-ADUser -Properties DistinguishedName | ForEach-Object {
$_.DistinguishedName.Split(",", 2)[1]
}
这会将DistinguishedName
分成逗号中的两部分(即第一个逗号之前的所有内容和之后的所有内容),并仅返回第二部分(数组索引[1]
)。
我可能会在结尾处添加Sort-Object
和Select-Object -Unique
。
值得一读:Get-ADOrganizationalUnit
,也许那就是你真正想要的东西?
这种方法类似于PowerShell本机-split
运算符:
$DNs = Get-ADUser -Properties DistinguishedName | Select -ExpandProperty DistinguishedName
$DNs -split ',',2 | where { $_.StartsWith("OU=") }