现在我有一个脚本,使用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
但是,当我需要的只是结果中的第一个CN时,managedby属性只提供FQDN(专有名称)。例如,在下面的例子中,我需要在ManagedBy下显示的是" testuser"。否CN =或DC =可分辨名称路径。
Name ManagedBy
---- ---------
TestGroup_Modify CN=testuser,CN=Users,DC=test,DC=domain,DC=com
我尝试了一些使用的东西" -replace"在select中有一些格式,但它最终删除了第一个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的方法。
答案 0 :(得分:1)
您的替换正则表达式对于您尝试执行的操作不正确。
我用这个:
$_.ManagedBy -replace '^CN=(.+?),(?:CN|OU).+','$1'
ManagedBy将永远是用户DN,因此模式将是CN = username,如果它仍然在默认的Users容器中,则后跟OU或其他CN。