将列表转置到powershell中的矩阵
我正在尝试修改我在网上找到的一些代码,并具有以下内容:将列表转置到powershell中的矩阵,powershell,powershell-3.0,Powershell,Powershell 3.0,我正在尝试修改我在网上找到的一些代码,并具有以下内容: $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 i
$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...
但我有两件事不能解决:
Accounts Support Sales
User1@domain.com 1 1
User2@domain.com 1
提前感谢您的帮助,我们将为您的帮助发布一些信誉点。您不想为此使用普通哈希表。将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
...
用户名帐户支持销售
-------- -------- ------- -----
User1@domain.com真假假真
User2@domain.com假真假
...
如果您希望为组使用空值而不是
False
,则用户不是将$False
替换为空字符串('
)的成员,并将$true
替换为您想要使用的任何标记(1
,'x'
,…)。您不想为此使用普通哈希表。将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
...
用户名帐户支持销售
-------- -------- ------- -----
User1@domain.com真假假真
User2@domain.com假真假
...
如果您希望组的值为空而不是
False
,则用户不是组的成员,请使用空字符串('
)替换$False
),并使用您想要使用的任何标记(1
,'x'
,…)替换$true
).输出结果会是什么样子?非常感谢它确实返回了一个用户名列表,逐行更新我的问题以解释,最后一步是将数组转换为矩阵。@g18c。|格式表
。输出结果会是什么样子?非常感谢它确实返回了一个用户名列表,逐行更新我的问题以解释,最后一步是将数组转换为矩阵。@g18c。|格式表
。