如何使用Powershell显示用户的OU

问题描述 投票:0回答:4

我正在尝试编写一个脚本来分别显示用户特定的属性、名称、邮件地址、OU。输出符合预期,但是我找不到任何解决方案来仅提取和显示用户的 OU 详细信息。当我选择“DistinguishedName”时,响应如下模式:{CN = X, OU = Y, DC = Z},我只想显示 OU。 iv'e 试图找到一种方法来分割 DN 字符串,但到目前为止还没有什么乐趣。

提前致谢

Set-ExecutionPolicy Unrestricted 
$filepath = "C:\Users\Administrator\Desktop\ADusers.Csv"
$searchDomain = "DC = GSDOM, DC=internal"
$adminCredential = Get-Credential
$adSrv = 'GSDC'
$session = New-PSSession -ComputerName "$adSrv" -Credential ($adminCredential)
Invoke-Command $session -Scriptblock { Import-Module ActiveDirectory }
Import-PSSession -Session $session -module ActiveDirectory
Get-ADUser -Filter * -Properties * | Select-Object "Name", "EmailAddress", "distinguishedName"

powershell active-directory
4个回答
5
投票

一种有效的方法是从

DistinguishedName
导出OU:

Get-ADUser -Filter * -Properties Mail |
    Select Name,Mail,DistinguishedName,@{n='OU';e={$_.DistinguishedName -replace '^.*?,(?=[A-Z]{2}=)'}}

这利用了计算属性,可以在Select-Object中找到。

-replace
使用不区分大小写的正则表达式进行匹配。由于我们没有包含替换字符串,因此匹配的文本只是被删除。
-creplace
是区分大小写的版本。有关正则表达式的详细信息,请参阅Regex

使用

-Properties *
并不明智,因为这可能会从远程服务器返回大量数据。由于您还使用
-Filter *
,这意味着您将返回所有用户的所有属性。它非常慢并且资源有限。


0
投票

我就是这样做的

Get-ADUser -Filter * -Properties Mail |
    Select Name,Mail,DistinguishedName,@{n='OU';e={($_.DistinguishedName.Split(",") | Where-Object {-Not $_.StartsWith("CN=")}) -join ","}}

0
投票
$Default_Title = "OU=Users,OU=Workers,DC=ad,DC=colorland,DC=pl" 

$justName = $Default_Title.Split(',').Split('=')[-7]

$justName

它只显示工人。


0
投票

OU 也可以在 CanonicalName 属性中找到。这看起来更像是一个目录结构,如下所示。

域名/OU1/OU2/姓氏、名字

但是,由于它使用“/”作为分隔符,因此如果用户的专有名称中可能有“,”,则使用 split 会更简单。

添加以下内容应该可以获得用户名之前最后一个 OU 的所需结果

e@{n=OU:e={($_.CanonicalName -split "/")[-2]}}

所以像下面这样的查询

Get-Aduser -filter * -properties CanonicalName | FT Name,@{n='OU';e={($_.CanonicalName  -split "/")[-2]}}

会回来 姓氏、名字 OU2

© www.soinside.com 2019 - 2024. All rights reserved.