Скрипт здесь:
https://gallery.technet.microsoft.com/scriptcenter/Powershell-Get-users-who-b0420fe1
вернет результаты для пользователей, которые существуют в основной группе, а также в любой из двух дополнительных групп (спасибо OP zperryz за код). Ниже моя версия этого скрипта на данный момент.
Я хотел бы добавить условия для пользователей с ограниченными возможностями и пользователей, которые находятся в определенной организационной единице "удержания". В другом скрипте я смог сделать это так (очевидно, фрагмент, а не весь скрипт):
| where {$_.Enabled -ne $False} `
| where {$_.DistinguishedName -notlike "*HOLD OU*"} `
Я просто не уверен, куда «вставить» их в сценарий ниже. (Будущая модификация будет возвращать больше информации, например DisplayName, Enabled и DistinguishedName, а не только вход в систему.)
Если у кого-то есть совет, буду очень признателен! Вот сценарий в его нынешнем виде:
$ADgroup1 = "VPN Front Door"
$ADgroup2 = "VPN Full Access"
$ADgroup3 = "VPN Restricted Access"
get-adgroupmember $ADgroup1 `
| ForEach-Object {if(((GET-ADUSER –Identity $_.SamAccountName –Properties MemberOf `
| Select-Object MemberOf).MemberOf -replace '^CN=([^,]+).+$','$1') -eq "$ADgroup2" -or "$ADgroup3"){$_.SamAccountName `
| Out-File -append -filepath C:\Users\3Jake\Desktop\VPN_Users.txt}}
Благодарю вас!
ФИНАЛЬНАЯ ВЕРСИЯ, полностью дополненная комментариями:
Как есть, он предназначен для работы в консоли, но его должно быть легко обновить, чтобы при необходимости выдать файл.
# Define Variables
$ADgroup1 = "VPN Front Door"
$ADgroup2 = "VPN Full Access"
$ADgroup3 = "VPN Restricted Access"
$vpnGroups = $ADgroup2, $ADgroup3
# Collect users in $ADgroup1
# Also pass user properties forward
$UsersFound = (
Get-ADGroupMember $ADgroup1 |
Get-ADUser -Properties MemberOf, Name, SamAccountName, Company |
# Ignore disabled users & those in the "On HOLD" OU
Where {
$_.Enabled -ne $False -and
$_.DistinguishedName -notlike '*HOLD OU*'
} |
# Compare users in $ADgroup1 to the ones in $ADgroup2 and $ADgroup3
select Name, SamAccountName, Company,
@{n='Groups';e={$_.MemberOf | Get-ADGroup | select -Expand Name}} |
Where { $groups = @($_.Groups); $vpnGroups | Where { $groups -contains $_ } }
)
# Display count
Write-Host "Total = " $UsersFound.Count
# Prompt to show user info
$YN = Read-Host "Show Users? (Y/N)"
if ($YN -eq 'Y')
{
$UsersFound |
select Name, SamAccountName, Company |
Sort-Object name, company |
Out-GridView
}
else {exit}