I am relatively new to powershell and I have two statements on the cmd line:
get-adgroupmember
To produce a nicely formatted table with two columns of a persons real name and their username.
get-adgroupmember
To produce list of groups that each user in a named group belongs to.
I would like to combine these so that I have a users real name + username and then the groups they belong to for each user например,
name samaccountname memberof
---- -------------- --------
joe bloggs jbloggs group1
group2
groupq
bob laithwaite blaithwaite group2
groupm
groupp
groupq
или, может быть,
joe bloggs jbloggs
group1
group2
groupq
bob laithwaite blaithwaite
group2
groupm
groupp
groupq
Есть какой-нибудь простой способ создать это? Меня не слишком беспокоит то, что это красиво.
Если нет простого способа, может ли кто-нибудь дать мне какие-нибудь указания, как я могу создать этот сложный способ? Если есть только трудный путь, тогда, хотя рабочий ответ был бы неплохим, я бы скорее имел указатели, с которых можно было бы начать, чтобы увидеть, могу ли я что-то создать сам. В конце концов, я все еще учусь.
Мой первоначальный поиск в Google обнаружил https://gallery.technet.microsoft.com/scriptcenter/Powershell-Get-users-who-b0420fe1 , но не смог найти работать со строкой cmd, заменяя переменные жестко закодированными строками. Это то, чего я в конечном итоге хочу достичь, но всего с двумя группами, однако в первую очередь я хочу начать с чего-то вроде результата, приведенного выше.
Я также обнаружил Как я могу создать список групп безопасности, к которым принадлежит набор пользователей? в процессе написания этого вопроса, но похоже, что это создает список, аналогичный тому, который я создал в вторая строка cmd, которая использует get-adprincipalgroupmembership.
В своем сообщении вы не указали, откуда исходит ваш список пользователей. Похоже, вы получаете пользователей одной группы и видите, членами каких еще они являются. Это в значительной степени не имеет отношения к решению, поэтому я предполагаю, что у вас есть список $ users
, и вы можете перейти оттуда.
Что вы хотите сделать, так это объединить свойства из двух команд в один выходной поток. Этого можно добиться, используя Расчетные свойства , например, так ...
$Users | %{Select DisplayName,SamAccountName,@{N="Groups";E={(Get-ADuser $_.SamAccountName -Properties memberof).memberof}}}
Вы также можете использовать подход, подобный этому:
Get-ADGroupMember $GroupName | %{Get-ADUser $_.SamAccountName -Properties memberof | Select Name, SamAccountName, memberof}
Не существует единой строки или единственного командлета, который дал бы вам то, что вы хотите, но с небольшим скриптом вы можете это получить. Ниже я написал сценарий, который сделает это, он очень простой, и вы должны понимать, что он делает, и изменять его в соответствии с вашими потребностями.
ipmo activedirectory
$searchBase = "OU=someOU,DC=yourdomain,DC=com"
$userlist = Get-ADUser -Filter * -SearchBase $searchBase -Properties memberOf
$report = @()
Foreach ($user in $userlist)
{
$name = $user.Name
$SAM = $user.SAMAccountName
$memberOf = $user.memberOf
$i = 0 #if you only want the user and SAMAccountName to appear once you will need a counter like this, it'se easier to just display it on every row
Foreach($Group in $memberOf)
{
$GroupName = $Group.Replace('CN=','')
$rowGroup = $GroupName -replace ",.*"
if($i -eq 0) #if you're happy to have username and SAMAccountName on each row you can skip this bit
{
$rowName = $name
$rowSAM = $SAM
}
else
{
$rowName = ""
$rowSAM = ""
}
$objRow = New-Object System.Object
$objRow | Add-Member -MemberType NoteProperty -Name Name -Value $rowName
$objRow | Add-Member -MemberType NoteProperty -Name SAMAccountName -Value $rowSAM
$objRow | Add-Member -MemberType NoteProperty -Name GroupName -Value $rowGroup
$report += $objRow
$i++
}
}
$report | ft
Вы можете попробовать таким образом, это даст вам список пользователей со всеми группами, которые находятся в
$users = get-content \\filepath.txt
foreach($u in $users){
$report += Get-Aduser $u -properties memberof| Get-ADGroup |select-object @{N="GroupName";E={$_.samaccountname}},@{N="username";E={$u}}
}
$report | Export-csv \\filepath.csv