He escrito un script de PowerShell para procesar e importar rutinariamente una gran cantidad (más de 70k) de contactos en un entorno de Exchange. El script funciona bien, pero me gustaría acelerarlo si es posible. Las partes que consumen más tiempo solían ser importar y exportar los datos.
Pude reducir mucho el tiempo de procesamiento al eliminar la mayoría de las dependencias de los cmdlets de Exchange 2013. Por ejemplo, al usar el cmdlet "nativo" Get-ADObject para extraer los datos en lugar de una combinación de Get-MailContact y Get-Contact específicos de Exchange, pude reducir el tiempo de procesamiento en un factor de 10.
El comando se ve así:
$result = Get-ADObject -LDAPFilter "(objectClass=contact)" -searchBase "$OU" -ResultPageSize 100 -property GivenName, SN, DisplayName, Department, physicalDeliveryOfficeName , telephoneNumber, mailnickname, targetaddress | select @{ label="Email"; Expression={ ($_.targetaddress -replace "^SMTP:","").tostring().Tolower().Trim() }}, @{ N="Alias"; E={ $_.mailnickname} }, @{ N="FirstName"; E={ $_.GivenName} }, @{ N="LastName"; E={ $_.SN} }, DisplayName, @{ N="Office"; E={ $_.physicalDeliveryOfficeName} } , Department, @{ N="Phone"; E={ $_.telephoneNumber} }
Ahora me gustaría poder hacer lo contrario, crear los contactos. Es decir, cree un contacto habilitado para correo sin usar cmdlets específicos de Exchange. Logré crear un contacto usando este comando:
$Attributes = @{'displayName' = $displayname; 'GivenName' = $first; 'SN' = $last; 'Department' = $department; 'physicalDeliveryOfficeName' = $office; 'telephoneNumber' = $phone; 'mail' = $email; 'mailnickname' = $alias; 'targetaddress' = $email}
New-AdObject -Type Contact -Name $displayname -Path $OU -OtherAttributes $Attributes -whatif
Sin embargo, aunque el objeto aparentemente se creó correctamente, no aparece entre los contactos en Exchange. Hasta ahora, la única forma en que he podido lograr esto es ejecutar el cmdlet "Enable-MailContact" en el objeto después de la creación, lo que anula el propósito de no usar cmdlets de Exchange en el proceso.
Entonces, mi pregunta es, ¿alguien sabe si hay una manera de crear un contacto habilitado para correo funcional usando solo el cmdlet New-ADObject y sin depender de cmdlets específicos de Exchange?
Gracias.
proxyAddresses
atributo y podría estar en el camino correcto, pero todavía no tengo cigarro. Mediante la comparación de dos contactos creados uno con los cmdlets de Exchange y uno con elNew-AdObject
cmdlet, noto que los siguientes atributos están vacíos en el segundo caso:AddressListMembership
,LegacyExchangeDN
,UMDtmfMap
. Además, el atributoExchangeVersion
está configurado0.1 (8.0.535.0)
para contactos creados por el propio Exchange y0.0 (6.5.6500.0)
para contactos creados porNew-AdObject
. Haré algunas pruebas más.