将PSObject正则表达式过滤后的结果与初始值名称组合

时间:2018-07-03 12:28:40

标签: powershell properties pipe psobject

需要在我的广告中的USERS属性中搜索一些字符串数据。我相信我已经迈出了第一步,并找到了它们,但是将结果合并到一个表中却遇到了一些麻烦-我需要确定用户的CN或Name(用来区分对象)。 这是在任何字符串属性中搜索12至16个字符的代码:

$search = 'OU=root,DC=contoso,DC=com'
$props =    @(
            'CN',
            'City',
            'Company',
            'Department',
            'Description',
            'Division',
            'Fax',
            'HomeDirectory',
            'Homepage',
            'HomePhone',
            'Initials',
            'MobilePhone',
            'Office',
            'OfficePhone',
            'Organization',
            'OtherName',
            'POBox',
            'PostalCode',
            'State',
            'StreetAddress',
            'Title'
            )
Get-ADUser -Filter * -Properties * -SearchBase $search | Select $props |
%{$_.psobject.properties} | 
?{$_.Value -match "(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{12,16}"} | 
Format-Table @{N='CN';E={$_.CN}},Name,Value -AutoSize

这给了我表格:

CN      Name        Value
____    ____        _____
        Description 2f565#124s$Dsa

我知道该管道在其末端并没有容纳CN。 我尝试使用foreach-object,但是在维护管道时无法正确重写所有函数(例如psobject.properties)。 我需要类似的东西:

(User)CN                                        PropName        Value
CN=bradpitt,OU=Users,OU=root,DC=contoso,DC=com  Description     2f565#124s$Dsa

1 个答案:

答案 0 :(得分:0)

感谢LotPings,这是工作结果,可以搜索12到16个字符(正则表达式表示:至少-一个大写字母,一个小写字母,一个数字和一个特殊字符):

[[ ... ]]