现在我有一个脚本,它使用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属性只提供FQDN(专有名称)当我需要的是结果中的第一个CN。例如,在下面的例子中,我需要在ManagedBy下显示的是"testuser"。No CN= or DC= distinguished name paths.
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
您的替换正则表达式不适合您要做的事情。
我用这个:
$_.ManagedBy -replace '^CN=(.+?),(?:CN|OU).+','$1'
ManagedBy将始终是一个用户DN,因此模式将是CN=username,后面跟着一个OU或另一个CN(如果它仍然在默认Users容器中)。