我通常是编程的新手,我正在尝试创建一个Powershell脚本,该脚本将:
-连接到虚拟控制器
-获取有权访问的所有活动目录用户的列表
-如果列表包含活动目录组,它将拉出该组中的个人列表。
这是我到目前为止所拥有的:
connect-viserver vcxx.com
import-module ActiveDirectory
Write-Host "---Admins---"
Get-VIPermission | where {$_.Role -eq "Admin"} | Select Role, UID
这就是显示的内容:
Role : Admin
Uid : /VIServer\user/Datacenter/Permission=Admin-CORP\xxxAdmins-group/
现在,我希望脚本查看关键字 group OR admins 的UID的最后一部分,如果找到了然后它会做到:
Get-ADGroupMember xxxAdmins-Group |Get-ADUser -Properties *|select name, account |ft -AutoSize
如果不清楚,请通知我。 感谢您的指导。
在@Chakani的帮助下,这就是我现在拥有的
$VIPerms = Get-VIPermission | where {$_.Role -eq "Admin"} | Select UID
$UID = $VIPerms.UID
$ADGroup = $UID -replace '.+\\(.+)/$','$1'
$ADGroupArray = $ADgroup -split '\s'
$ADSplit = Foreach($i in $ADGroupArray){If($i -match '(admins|group)') {$i -split "-group"}}
$ADSplit
$Users = Foreach($j in $ADSplit){Get-ADGroupMember $j|Get-ADUser -Properties *|select givenname, surname, samaccountname }
$Users | select givenname, surname, samaccountname | ft -autosize
答案 0 :(得分:0)
我相信,在这种情况下,最好的方法是使用其中一个powershell regex运算符,并且看起来像这样:
将cmdlet的UID输出分配给一个变量,然后对其进行解析,如果它与您要查找的内容相匹配(如果我理解该最后一节中的“管理员”或“组”之类的声音,请在''和'/'之间正确地剪裁出所需的东西,然后将其放入Get-ADGroupMember中。
如果UID的所有先前结构都将始终保持相同的结构,那么我将首先进行替换,然后将剩余的内容与所需的内容进行匹配,如下所示:
$VIPerms = Get-VIPermission | where {$_.Role -eq "Admin"} | Select Role, UserID
$UID = $VIPerms.UID
$ADGroup = $UID -replace '.+\\(.+)/$','$1'
If($ADGroup -match '(admins|group)'){
Get-ADGroupMember $ADGroup |Get-ADUser -Properties *|select name, account |ft -AutoSize
}
确保在“ $ 1”周围使用单引号,以便获得“第一组”的正则表达式值,而不是变量$ 1。