如何从命令行拆分内容

时间:2018-04-30 12:05:25

标签: powershell split

我的问题是如何在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

2 个答案:

答案 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-ObjectSelect-Object -Unique

值得一读:Get-ADOrganizationalUnit,也许那就是你真正想要的东西?

这种方法类似于PowerShell本机-split运算符:

$DNs = Get-ADUser -Properties DistinguishedName | Select -ExpandProperty DistinguishedName
$DNs -split ',',2 | where { $_.StartsWith("OU=") }