Powershell& Get-ADUser - 拆分OU从结尾获取第3,第4和第5个元素

时间:2015-09-24 22:46:09

标签: powershell split active-directory

在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

我找到了一些分裂字符串的例子,但没有什么可以完成我在这里尝试的东西。

有什么想法吗?!

非常感谢任何帮助。提前谢谢!

2 个答案:

答案 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
 }
}

我正在打字,我应该测试,但我想你明白了......