Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Формат users.txt:

Код: Выделить весь код
MailboxName;UserName;Password
user1@domai.ru;user@domain.ru;MYPassw01e
user2@domai.ru;user@domain.ru;MYPassw01e
user3@domai.ru;user@domain.ru;MYPassw01e
Скрипт:

Код: Выделить весь код
Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll" 

## Set Exchange Version 
$ExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2

## Choose to ignore any SSL Warning issues caused by Self Signed Certificates 
## Code From http://poshcode.org/624
## Create a compilation environment
$Provider=New-Object Microsoft.CSharp.CSharpCodeProvider
$Compiler=$Provider.CreateCompiler()
$Params=New-Object System.CodeDom.Compiler.CompilerParameters
$Params.GenerateExecutable=$False
$Params.GenerateInMemory=$True
$Params.IncludeDebugInformation=$False
$Params.ReferencedAssemblies.Add("System.DLL") | Out-Null

$TASource=@'
namespace Local.ToolkitExtensions.Net.CertificatePolicy{
public class TrustAll : System.Net.ICertificatePolicy {
public TrustAll() { 
}
public bool CheckValidationResult(System.Net.ServicePoint sp,
System.Security.Cryptography.X509Certificates.X509Certificate cert, 
System.Net.WebRequest req, int problem) {
return true;
}
}
}
'@ 
$TAResults=$Provider.CompileAssemblyFromSource($Params,$TASource)
$TAAssembly=$TAResults.CompiledAssembly

## We now create an instance of the TrustAll and attach it to the ServicePointManager
$TrustAll=$TAAssembly.CreateInstance("Local.ToolkitExtensions.Net.CertificatePolicy.TrustAll")
[System.Net.ServicePointManager]::CertificatePolicy=$TrustAll


$creds = Import-Csv users.txt -Delimiter ";"

foreach ($cred in $creds)
{
	## Create Exchange Service Object 
	$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($ExchangeVersion) 
	
	$creds = New-Object System.Net.NetworkCredential($cred.UserName,$cred.Password)) 
	$service.Credentials = $creds 
	
	$MailboxName = $cred.MailboxName
	
	$service.AutodiscoverUrl($MailboxName,{$true}) 
	"Using CAS Server : " + $Service.url
	
	$ExportCollection = @()
	$Folders = @()
	
	$folderid= new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Contacts,$MailboxName) 
	$Contacts = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)
	
	$Folders += $Contacts.Id
	
	
	$coFolderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1000)
	$coFolderView.Traversal = "Deep"

	$sf = New-Object Collections.Generic.List["Microsoft.Exchange.WebServices.Data.SearchFilter"]
	$sf.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::FolderClass,"IPF.Contact")))
	$sf.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThan([Microsoft.Exchange.WebServices.Data.FolderSchema]::TotalCount,0)))

	$sf = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+SearchFilterCollection([Microsoft.Exchange.WebServices.Data.LogicalOperator]::And, $sf.ToArray())

	$service.FindFolders($Contacts.Id,$sf,$coFolderView) | Foreach {$Folders += $_.Id}

	$psPropset = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties) 
	$PR_Gender = New-Object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(14925,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Short)
	$psPropset.Add($PR_Gender)
	
	foreach($folder in $folders)
	{
		#Define ItemView to retrive just 1000 Items 
		$ivItemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView(1000) 
		$fiItems = $null 
		do { 
			$fiItems = $service.FindItems($Folder,$ivItemView) 
			[Void]$service.LoadPropertiesForItems($fiItems,$psPropset) 
			foreach($Item in $fiItems.Items){ 
			if($Item -is [Microsoft.Exchange.WebServices.Data.Contact]){
			$expObj = "" | select DisplayName,GivenName,Surname,Gender,Email1DisplayName,Email1Type,Email1EmailAddress,BusinessPhone,M obilePhone,HomePhone,BusinessStreet,BusinessCity,BusinessState,HomeStreet,HomeCity,HomeState
			$expObj.DisplayName = $Item.DisplayName
			$expObj.GivenName = $Item.GivenName
			$expObj.Surname = $Item.Surname
			$expObj.Gender = ""
			$Gender = $null
			if($item.TryGetProperty($PR_Gender,[ref]$Gender)){
				if($Gender -eq 2){
					$expObj.Gender = "Male" 
				}
				if($Gender -eq 1){
					$expObj.Gender = "Female" 
				}
			}
		 
			 $BusinessPhone = $null
			 $MobilePhone = $null
			 $HomePhone = $null
			 if($Item.PhoneNumbers -ne $null){
				if($Item.PhoneNumbers.TryGetValue([Microsoft.Exchange.WebServices.Data.PhoneNumberKey]::BusinessPhone,[ref]$BusinessPhone)){
					$expObj.BusinessPhone = $BusinessPhone
				 }
				 if($Item.PhoneNumbers.TryGetValue([Microsoft.Exchange.WebServices.Data.PhoneNumberKey]::MobilePhone,[ref]$MobilePhone)){
					$expObj.MobilePhone = $MobilePhone
				 } 
				 if($Item.PhoneNumbers.TryGetValue([Microsoft.Exchange.WebServices.Data.PhoneNumberKey]::HomePhone,[ref]$HomePhone)){
					$expObj.HomePhone = $HomePhone
				 } 
			 } 
			 if($Item.EmailAddresses.Contains([Microsoft.Exchange.WebServices.Data.EmailAddressKey]::EmailAddress1)){ 
				 $expObj.Email1DisplayName = $Item.EmailAddresses[[Microsoft.Exchange.WebServices.Data.EmailAddressKey]::EmailAddress1].Name
				 $expObj.Email1Type = $Item.EmailAddresses[[Microsoft.Exchange.WebServices.Data.EmailAddressKey]::EmailAddress1].RoutingType
				 $expObj.Email1EmailAddress = $Item.EmailAddresses[[Microsoft.Exchange.WebServices.Data.EmailAddressKey]::EmailAddress1].Address
			 }
			 
			 $HomeAddress = $null
			 $BusinessAddress = $null
			 if($item.PhysicalAddresses -ne $null){
				 if($item.PhysicalAddresses.TryGetValue([Microsoft.Exchange.WebServices.Data.PhysicalAddressKey]::Home,[ref]$HomeAddress)){
					 $expObj.HomeStreet = $HomeAddress.Street
					 $expObj.HomeCity = $HomeAddress.City
					 $expObj.HomeState = $HomeAddress.State
				 }
				 if($item.PhysicalAddresses.TryGetValue([Microsoft.Exchange.WebServices.Data.PhysicalAddressKey]::Business,[ref]$BusinessAddress)){
					 $expObj.BusinessStreet = $BusinessAddress.Street
					 $expObj.BusinessCity = $BusinessAddress.City
					 $expObj.BusinessState = $BusinessAddress.State
				 }
			 }

			$ExportCollection += $expObj
			 }
			 } 
			 $ivItemView.Offset += $fiItems.Items.Count 
		 } while($fiItems.MoreAvailable -eq $true) 
	}
	
	$fnFileName = "c:\temp\" + $MailboxName + "_" + (Get-Date).ToString("ddMMyyyyHHmmss") + "_" + "-ContactsExport.csv"
	$ExportCollection | Export-Csv -NoTypeInformation -Path $fnFileName -Encoding UTF8
	"Exported to " + $fnFileName
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:05, 15-09-2015 | #5