angle-left

PowerShell для получения контактов из AD

PowerShell предоставляет богатый и мощный инструментарий для работы в Windows среде. В данной статье я рассмотрю возможности PowerShell по работе с такими объектами Active Directory, как контакты.

При развернутой Microsoft инфраструктуре с Exchange существуют общие (расшаренные) контакты.

Для получения контактов существует командлет get-contact

Команда выводит контакты в форме объектов (не забываем, что PowerShell объектный :-)) Для просмотра всех полей поставим в конвеер format-list

Get-Contact | Format-List

Вывод данной комманды будет следующим:

OrganizationalUnit       : tune-it.ru/exchange
AssistantName            :
City                     : Saint-Petersbourg
Company                  :
CountryOrRegion          : Russia
Department               :
DirectReports            : {}
DisplayName              : vasya
Fax                      :
FirstName                : Vasiliy
HomePhone                :
Initials                 :
LastName                 : Pupkin
Manager                  :
MobilePhone              :+123456789
Notes                    :
Office                   : General Office
OtherFax                 : {}
OtherHomePhone           : {}
OtherTelephone           : {}
Pager                    :
Phone                    : +987654321
PhoneticDisplayName      :
PostalCode               :
PostOfficeBox            : {}
RecipientType            : Contact
RecipientTypeDetails     : Contact
SimpleDisplayName        :
StateOrProvince          :
StreetAddress            :  10-Krasnoarmeyskaya Street 22
Title                    : Engeener
UMDialPlan               :
UMDtmfMap                : {}
AllowUMCallsFromNonUsers : SearchEnabled
WebPage                  :
TelephoneAssistant       :
WindowsEmailAddress      : vasiliy.pupkin@tune-it.ru
IsValid                  : True
OriginatingServer        :  **.tune-it.ru
ExchangeVersion          : 0.0 (6.5.6500.0)
Name                     : Vasiliy Pupkin
DistinguishedName        : CN=Vasiliy Pupkin,OU=exchange,DC=tune-it,DC=ru
Identity                 : tune-it.ru/exchange/Vasiliy Pupkin
Guid                     : 65a96c0c-a918-4976-8d2c-c873a6a54ec6
ObjectCategory           :tune-it .ru/Configuration/Schema/Person
ObjectClass              : {top, person, organizationalPerson, contact}
WhenChanged              : 9/23/2013 4:05:52 AM
WhenCreated              : 9/23/2013 2:54:02 AM

 

Так как мы имеем дело с объектом, получить необходимые значения полей мы можем с помощью команды Select

get-contact |select Name,WindowsEmailAddress,Company,Title,City,streetaddress,Phone,MobilePhone

К сожалению get-contact не дает возможности получить все (включая и расширенные extended) аттрибуты контактов.
Для получения extended полей (например ip телефон) воспользуемся

([adsisearcher]'objectClass=contact').FindALL()| ForEach-Object{$_.GetDirectoryEntry() } | select * 

Вывод представлен ниже

objectClass                : {top, person, organizationalPerson, contact}
cn                         : {Vasiliy Pupkin}
sn                         : {Pupkin}
c                          : {RU}
l                          : {Saint-Petersbourg}
physicalDeliveryOfficeName : {General Office}
telephoneNumber            : {+987654321}
givenName                  : {Vasiliy}
distinguishedName          : {CN=Vasiliy Pupkin,OU=exchange,DC=tune-it,DC=ru}
instanceType               : {4}
whenCreated                : {9/23/2013 9:54:02 AM}
whenChanged                : {9/23/2013 11:15:04 AM}
displayName                : {vasya}
uSNCreated                 : {System.__ComObject}
uSNChanged                 : {System.__ComObject}
co                         : {Russia}
streetAddress              : {10-Krasnoarmeyskaya 22}
name                       : {Vasiliy Pupkin}
objectGUID                 : {12 108 169 101 24 169 118 73 141 44 200 115 166 165 78 198}
countryCode                : {643}
ipPhone                    : {30}
objectCategory             : {CN=Person,CN=Schema,CN=Configuration,DC=tune-it,DC=ru}
dSCorePropagationData      : {1/1/1601 12:00:00 AM}
mail                       : {vasiliy.pupkin@tune-it.ru}
mobile                     : {+123456789}
nTSecurityDescriptor       : {System.__ComObject}
AuthenticationType         : Secure
Children                   : {}
Guid                       : 0c6ca96518a976498d2cc873a6a54ec6
ObjectSecurity             : System.DirectoryServices.ActiveDirectorySecurity
NativeGuid                 : 0c6ca96518a976498d2cc873a6a54ec6
NativeObject               : System.__ComObject
Parent                     : LDAP://OU=exchange,DC=tune-it,DC=ru
Password                   :
Path                       : LDAP://CN=Vasiliy Pupkin,OU=exchange,DC=tune-it,DC=ru
Properties                 : {objectClass, cn, sn, c...}
SchemaClassName            : contact
SchemaEntry                : System.DirectoryServices.DirectoryEntry
UsePropertyCache           : True
Username                   :
Options                    : {}
Site                       :
Container                  :

 

Для выбора полей воспользуемся уже известным select :
 

([adsisearcher]'objectClass=contact').FindALL()| ForEach-Object{$_.GetDirectoryEntry() } |
select name,mail,Company,Title,telephonenumber,homephone,mobile,ipphone,co,l,Streetaddress,whencreated

name            : {Vasiliy Pupkin}
mail            : {vasiliy.pupkin@tune-it.ru}
Company         : {}
Title           : {}
telephonenumber : {+987654321}
homephone       : {}
mobile          : {+123456789}
ipphone         : {30}
co              : {Russia}
l               : {Saint-Petersbourg}
Streetaddress   : {10-Krasnoarmeyskaya 22}
whencreated     : {9/23/2013 9:5

 

Как можно убедиться из данной статьи работа с PowerShell позволяет легко выцеплять и преобразовывать необходимую информацию при небольших затратах времени.