尝试合并数据但似乎停止
Attempting to combine data but appears to stall
我使用了一个脚本来获取许可信息,效果很好。我想将组信息抓取到这个脚本中,这样我就可以看到一个人在哪个组中,同时还可以获得关于他们的其他信息,脚本的重要部分如下所示
$result = foreach($domain in $domains){
$users = Get-MsolUser -all | where {$_.islicensed -eq "$true" -and $_.Userprincipalname -match "$domain"}
foreach ($i in $users){
$licenses = $i.Licenses
$licenseArray = $licenses | foreach-Object {$_.AccountSkuId}
$licensear = Friendlyname
$licenseString = $licenseAr -join ", "
New-Object PSObject -Property @{
Displayname = $i.Displayname
Userprincipalname = $i.userprincipalname
UPN = ($i.userprincipalname -Split '@')[1]
Licenses = $licenseString
}
}
}
这没有问题,但显然,无法从 Get-MsolUser
获取组信息,这导致我使用 Get-MsolGroup
继续使用 MOnline 模块。因此,我添加了以下内容:
$Groups1 = foreach ($Group in (Get-MsolGroup -all)){
if (Get-MsolGroupMember -all -GroupObjectId $Group.ObjectId | where {$_.Emailaddress -eq $i.UserPrincipalName}) {$Group.Displayname}
}
$groups2 = $Groups1 -join ", "
结合使用,我将其添加到 Groups = $groups2
的新对象区域
我 运行 进入这里是一个巨大的停顿,实际上什么也没做,当通过调试器测试它时,我可以看到 $groups1/2 正在抓取并输出,因为我'我期待,但它似乎停在我添加的那一行。
我期待的是完成它,这样当我 select-反对这些新对象时,groups 字段将填充 $groups2 数据,这不会发生。
究竟是什么导致了这种行为?
继续我的评论,我会先收集组和成员,然后在您的用户循环中引用该变量。
$groups = Get-MsolGroup -All
$groupsandmembers = $groups | ForEach-Object {
[PSCustomObject]@{
GroupName = $_.displayname
Members = Get-MsolGroupMember -All -GroupObjectId $_.objectid |
Select-Object -ExpandProperty emailaddress
}
}
$result = foreach($domain in $domains){
$users = Get-MsolUser -all | Where-Object {
$_.islicensed -eq $true -and
$_.Userprincipalname -match $domain
}
foreach ($i in $users){
$licenses = $i.Licenses
$licenseArray = $licenses.AccountSkuId
$licensear = Friendlyname
$licenseString = $licenseAr -join ", "
[PSCustomObject]@{
Displayname = $i.Displayname
Userprincipalname = $i.userprincipalname
UPN = ($i.userprincipalname -Split '@')[1]
Licenses = $licenseString
Groups = ($groupsandmembers | Where-Object members -contains $i.userprincipalname).groupname -join ', '
}
}
}
我使用了一个脚本来获取许可信息,效果很好。我想将组信息抓取到这个脚本中,这样我就可以看到一个人在哪个组中,同时还可以获得关于他们的其他信息,脚本的重要部分如下所示
$result = foreach($domain in $domains){
$users = Get-MsolUser -all | where {$_.islicensed -eq "$true" -and $_.Userprincipalname -match "$domain"}
foreach ($i in $users){
$licenses = $i.Licenses
$licenseArray = $licenses | foreach-Object {$_.AccountSkuId}
$licensear = Friendlyname
$licenseString = $licenseAr -join ", "
New-Object PSObject -Property @{
Displayname = $i.Displayname
Userprincipalname = $i.userprincipalname
UPN = ($i.userprincipalname -Split '@')[1]
Licenses = $licenseString
}
}
}
这没有问题,但显然,无法从 Get-MsolUser
获取组信息,这导致我使用 Get-MsolGroup
继续使用 MOnline 模块。因此,我添加了以下内容:
$Groups1 = foreach ($Group in (Get-MsolGroup -all)){
if (Get-MsolGroupMember -all -GroupObjectId $Group.ObjectId | where {$_.Emailaddress -eq $i.UserPrincipalName}) {$Group.Displayname}
}
$groups2 = $Groups1 -join ", "
结合使用,我将其添加到 Groups = $groups2
我 运行 进入这里是一个巨大的停顿,实际上什么也没做,当通过调试器测试它时,我可以看到 $groups1/2 正在抓取并输出,因为我'我期待,但它似乎停在我添加的那一行。
我期待的是完成它,这样当我 select-反对这些新对象时,groups 字段将填充 $groups2 数据,这不会发生。
究竟是什么导致了这种行为?
继续我的评论,我会先收集组和成员,然后在您的用户循环中引用该变量。
$groups = Get-MsolGroup -All
$groupsandmembers = $groups | ForEach-Object {
[PSCustomObject]@{
GroupName = $_.displayname
Members = Get-MsolGroupMember -All -GroupObjectId $_.objectid |
Select-Object -ExpandProperty emailaddress
}
}
$result = foreach($domain in $domains){
$users = Get-MsolUser -all | Where-Object {
$_.islicensed -eq $true -and
$_.Userprincipalname -match $domain
}
foreach ($i in $users){
$licenses = $i.Licenses
$licenseArray = $licenses.AccountSkuId
$licensear = Friendlyname
$licenseString = $licenseAr -join ", "
[PSCustomObject]@{
Displayname = $i.Displayname
Userprincipalname = $i.userprincipalname
UPN = ($i.userprincipalname -Split '@')[1]
Licenses = $licenseString
Groups = ($groupsandmembers | Where-Object members -contains $i.userprincipalname).groupname -join ', '
}
}
}