我正在尝试调整我在网上找到的一些代码并具有以下内容:
$groups = Get-ADGroup -Filter {GroupCategory -eq ‘security’} -SearchBase ‘OU=Groups,DC=corp,DC=test,DC=local’
$users = Get-ADUser -Filter * -SearchBase “dc=corp,dc=test,dc=local”
$addADGroupMembers = @{}
foreach($group in $groups) {
$addADGroupMembers.Add($group.Name, $group.ObjectGUID)
}
$htUsers = @{}
$htProps = @{}
$addADGroupMembers.Keys | foreach {$htProps.$_=$null}
foreach ($group in $addADGroupMembers.GetEnumerator()){
foreach ($user in $group.Value){
if (!$htUsers.ContainsKey($user)){
$htProps.UserID = $user
$htUsers.$user = $htProps.Clone()
}
($htUsers.$user).$($group.Name) = 1
}
}
这给了我一个用户列表,每个用户都有一个列表元素如下:
Accounts Administrators : False
Support Read-Write : False
Username : user1@test.local
Purchasing Read-Write : False
Developers Administrators : False
SharePoint 365 Administrators : False
Operations Read-Write : False
Accounts Administrators : True
Support Read-Write : False
Username : joe@test.local
Purchasing Read-Write : False
Developers Administrators : False
SharePoint 365 Administrators : True
Operations Read-Write : False
#snip...
但我有两件事情我无法解决:
如何获得用户主体名称?我无法从ObjectGUID中查找它,也无法找到如何从我的用户数组中查找。
如何将其排序为打印矩阵,其中我有一排用户(并且UPN是第一列),以及它们的关联组(如果它们是成员,则为True)顶部。
这将形成如下:
Accounts Support Sales
User1@domain.com 1 1
User2@domain.com 1
感谢您提前获得帮助,我们会为您提供一些声望点。
答案 0 :(得分:3)
您不想为此使用普通哈希表。将UPN和组名放在(有序)哈希表中,并从中创建自定义对象:
$groups = Get-ADGroup -Filter "GroupCategory -eq 'security'" -SearchBase 'OU=Groups,DC=corp,DC=test,DC=local'
Get-ADUser -Filter * -SearchBase "dc=corp,dc=test,dc=local" -Properties MemberOf | ForEach-Object {
$props = [ordered]@{ 'Username' = $_.UserPrincipalName }
$groups | ForEach-Object {
$props[$_.Name] = $false
}
$_.MemberOf | Get-ADGroup | Select-Object -Expand Name | ForEach-Object {
if ($props.ContainsKey($_)) {
$props[$_] = $true
}
}
New-Object -Type PSObject -Property $props
}
输出看起来有点像这样:
Username Accounts Support Sales -------- -------- ------- ----- User1@domain.com True False True User2@domain.com False True False ...
如果您希望组的空值而不是False
,则用户不能使用空字符串$false
替换''
成员并替换$true
使用您想要使用的任何标记(1
,'x'
,...)。