【问题标题】:Formatting results from Powershell Select statement for ManagedBy Attribute in AD格式化 AD 中 ManagedBy 属性的 Powershell Select 语句的结果
【发布时间】:2014-05-06 15:51:28
【问题描述】:

现在我有一个脚本,它使用 powershell 收集用户组名称和相关的 ManagedBy 属性。

$test = 'OU=example,DC=example,DC=test'

$test | ForEach {Get-ADGroup -Filter * -Properties ManagedBy -SearchBase $_ } |
Select Name, ManagedBy |
Sort -Property Name |
Out-File C:\test.csv

结果通过,但 managedby 属性仅在我需要的只是结果中的第一个 CN 时才提供 FQDN(可分辨名称)。例如,在下面的例子中,我需要在 ManagedBy 下显示的是“testuser”。没有 CN= 或 DC= 可分辨名称路径。

Name                                     ManagedBy                           
----                                     ---------                           
TestGroup_Modify             CN=testuser,CN=Users,DC=test,DC=domain,DC=com

我尝试了一些方法来使用“-replace”和选择中的一些格式,但它最终删除了第一个 CN。

Select -Property Name, @{n='ManagedBy';e={$_.ManagedBy -replace '^.+?,(CN|DC.+)','$1'}}

结果:

Name                                     ManagedBy                           
----                                     ---------                           
TestGroup_Modify             CN=Users,DC=test,DC=domain,DC=com   

有没有人知道格式化这些结果的方法或使用组的 ManagedBy 属性的经验?我试图找出一种方法以某种方式将 ManagedBy 属性链接回用户 SAMAccountName,但没有成功/缺乏 powershell 体验。 (我认为这与检索 ADGroups 而不是 ADUsers 的查询有关)提前感谢我在这方面收到的任何帮助。

最终目标是实现这样的目标:

Name                                     ManagedBy                           
----                                     ---------                           
TestGroup_Modify                         testuser

更新*

嗯,好的,更改替换后我得到如下结果:

Name                                     ManagedBy                                                
----                                     ---------                                                
TestGroup_Modify            testuser=Users,DC=test,DC=domain,DC=com

这很有帮助,因为它以 CN 开头,但因为每个 ManagedBy 用户都会有

'=Users,DC=test,DC=domain,DC=com'

附加,是否可以从结果中过滤掉这个字符串(因为所有结果都会有它)只留下用户 CN 还是不在 powershell 的范围内?谢谢你的帮助。

编辑*

这是我跑的:

$test = 'OU=example,DC=example,DC=test'

$test | ForEach {Get-ADGroup -Filter * -Properties ManagedBy -SearchBase $_} |
Select -Property Name, @{n='ManagedBy';e={$_.ManagedBy -replace '^CN=(.+?),(CN|OU.+)','$1'}} |
Sort -Property Name | 
Format-Table -Property Name, ManagedBy -Force -AutoSize |
Out-File C:\test.csv

得到这些结果:

Name                                     ManagedBy                                                
----                                     ---------                                                
TestGroup_Modify            testuser=Users,DC=test,DC=domain,DC=com

如果可能的话,只是寻找一种方法来单独列出 testuser。

【问题讨论】:

    标签: powershell select csv active-directory formatting


    【解决方案1】:

    您的替换正则表达式与您尝试执行的操作不正确。

    我用这个:

    $_.ManagedBy -replace '^CN=(.+?),(?:CN|OU).+','$1'
    

    ManagedBy 将始终是用户 DN,因此模式将为 CN=username,如果它仍在默认用户容器中,则后跟一个 OU 或另一个 CN。

    【讨论】:

    • 我根据您的建议更新了我的脚本,这很有帮助,但是如果您可以看一下,我在第一篇文章中添加了一个关于此场景的问题
    • 您能否准确发布您正在使用的内容。我相信我在解决方案中发布的 -replace 应该可以满足您的需求。
    • 我将我正在使用的完整脚本添加到原始帖子和结果中
    • 我很抱歉。有关闭的paren在错误的地方。更新了答案(还添加了 ?: 以使其成为非捕获组。不会改变结果,但会提高一点效率)。
    • 是的!你是传奇mjolinor。将此标记为已解决。我相信您在几个月前也帮助我解决了我之前的 powershell 问题。感谢您的时间和帮助。我仍在尝试理解替换逻辑,因为它对我来说是新的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多