我正试图从ADGroup获得电子邮件列表。问题是组中有成员没有电子邮件,如果字段为空,我希望变量显示ADuser而不是电子邮件。
当前代码是这个
$emails = get-adgroupmember gg-sccm-admins | get-aduser -Properties emailaddress | select emailaddress
$emails+= get-adgroupmember gg-sccm-site_admins | get-aduser -Properties emailaddress | select emailaddress
Write-Output $emails
我的想法是使用IF,如果电子邮件字段是空的,在变量中写用户名,但我不能让它工作。
我想你可以在下面使用:
$emails = get-adgroupmember gg-sccm-admins | Get-ADUser -Properties emailaddress | select @{N="EmailAddress";E={if($_.emailaddress){$_.emailaddress}else{$_.samaccountname}}}
$emails+= get-adgroupmember gg-sccm-site_admins | Get-ADUser -Properties emailaddress | select @{N="EmailAddress";E={if($_.emailaddress){$_.emailaddress}else{$_.samaccountname}}}
Write-Output $emails
为什么不两者都做呢?
[System.Collections.ArrayList]$Emails = @()
[System.Collections.ArrayList]$Names = @()
[array]$GroupMembers = Get-ADGroupMember "gg-sccm-admins" | Get-ADUser -Properties emailaddress,DisplayName | Select EmailAddress, DisplayName
Foreach($user in $GroupMembers){
$null = $Emails.Add($User.EmailAddress)
$null = $Names.Add($User.DisplayName)
}
For($i=0;$i -lt $Names.count;$i++){
[pscustomobject]@{
"User Names" = $Names[$i]
"Emails" = $Emails[$i]
}
}
另外,我没有使用固定数组,而是将其更改为ArrayList。应该使过程更快,因为它不需要每次都用一个新项重新创建每个数组。