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 позволяет легко выцеплять и преобразовывать необходимую информацию при небольших затратах времени.