Это, кажется, область, где мне не хватает. Я написал этот скрипт, который добавит пользователей в 1 группу, если они не находятся ни в одном из 3-х, и только если у них есть GUID Exchange, но он медленный, как обычно, из-за вызовов взад и вперед по AD. Я пробовал различные попытки использовать хеш-таблицы, но я не могу понять, как получить свойства подстроки, такие как MemberOf, из ключей. Я вижу преимущество сбора данных сначала через $hash = @{}
, но мои различные тесты всегда имеют значение null, потому что я не понимаю, как извлечь из него строки. Вот то, что я после попытки вернуть его к старой рабочей версии ... ThxPowershell Array или Hash Table?
Import-Module ActiveDirectory
$a = Get-Date
$Logs = "C:\scripts\SEC-E2010TierGroup3\SEC-E2010TierGroup3-additions_$((Get-Date).ToString('MM-dd-yyyy')).csv"
$Grp0 = "SEC-E2010TierGroup0"
$Grp1 = "SEC-E2010TierGroup1"
$Grp2 = "SEC-E2010TierGroup2"
$Grp3 = "SEC-E2010TierGroup3"
#$ADUserTable = @{}
$Users = Get-ADUser -server "dc114" -LdapFilter "(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))(&(objectCategory=person)(objectClass=user)(!objectClass=inetOrgPerson))(sAMAccountName=s0*)(!sAMAccountName=*-d)(!sAMAccountName=*-e)(!sAMAccountName=*-a)(!Name=Test*)(!Name=v-*)(!employeeID=\00))" -properties SamAccountName, DistinguishedName,Name, memberof, msExchMailboxGuid
<#ForEach-Object {
$ADUserTable[$_.SamAccountName] = $_
}#>
function Get-GroupMembership($DN,$group){
$objEntry = [adsi]("LDAP://"+$DN)
$objEntry.memberOf | where { $_ -match $group}
}
#Usage:
# Get-GroupMembership "DistinguishedName" "DomainAdmins"#>
<#$Active = #>ForEach ($user in $Users) {
$strName = $User.samaccountname
$DNUser = $User.distinguishedname
$strFilter = "(&(objectCategory=User)(samAccountName=$strName))"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $strFilter
$objPath = $objSearcher.FindOne()
$objUser = $objPath.GetDirectoryEntry()
$Exch = $objUser.msExchMailboxGuid#>
#If here, has an Exchange Mailbox.(Get-GroupMembership "$UserDN" "$Grp0")
if ($Exch.count -eq 1){
If (Get-GroupMembership "$DNUser" "$Grp0") {(""+ $a +" [" + $User + "], User:[" + $User.value.Name + "] in SEC-E2010TierGroup0.") | Out-File -FilePath $Logs -Append
Continue}
If (Get-GroupMembership "$DNUser" "$Grp1") {(""+ $a +" [" + $User + "], User:[" + $User.value.Name + "] in SEC-E2010TierGroup1.") | Out-File -FilePath $Logs -Append
Continue}
If (Get-GroupMembership "$DNUser" "$Grp2") {(""+ $a +" [" + $User + "], User:[" + $User.value.Name + "] in SEC-E2010TierGroup2.") | Out-File -FilePath $Logs -Append
Continue}
If (!(Get-GroupMembership "$DNUser" "$Grp3")) {
(""+ $a +" [" + $User + "], User:[" + $User.value.Name + "] not in SEC-E2010TierGroup3. Adding to group3.") | Out-File -FilePath $Logs -Append}
}
#If here, no Exch Mailbox.
if ($Exch.count -eq 1) {(""+ $a +" [" + $User + "], User:[" + $User.value.Name + "] does not have Exchange GUID.") | Out-File -FilePath $Logs -Append
continue}
} #$Active | Export-csv C:\Scripts\SEC-E2010TierGroup3\SEC-E2010TIER-Pre-Implimentation-rpt_2-18-2016.csv -NoTypeInformation
В коде была разумная цитата. Я заменил его обычной двойной цитатой, чтобы удовлетворить Google Prettify. – Matt