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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Exchange. Экспорт контактов

Ответить
Настройки темы
PowerShell - [решено] Exchange. Экспорт контактов

Новый участник


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

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


Изменения
Автор: rox33
Дата: 14-09-2015
Уважаемые, добрый день!
Такая появилась проблема.
Необходимо выгружать контакты пользователей из Exchange в автоматическом режиме.
Нашел скрипт
Скрытый текст
Цитата:
## Get the Mailbox to Access from the 1st commandline argument

$MailboxName = $args[0]

## Load Managed API dll
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

## Create Exchange Service Object
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($ExchangeVersion)

## Set Credentials to use two options are availible Option1 to use explict credentials or Option 2 use the Default (logged On) credentials

#Credentials Option 1 using UPN for the windows Account
$psCred = Get-Credential
$creds = New-Object System.Net.NetworkCredential($psCred.UserName.ToString(),$psCred.GetNetworkCredential().password.ToS tring())
$service.Credentials = $creds

#Credentials Option 2
#service.UseDefaultCredentials = $true

## 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

## end code from http://poshcode.org/624

## Set the URL of the CAS (Client Access Server) to use two options are availbe to use Autodiscover to find the CAS URL or Hardcode the CAS to use

#CAS URL Option 1 Autodiscover
$service.AutodiscoverUrl($MailboxName,{$true})
"Using CAS Server : " + $Service.url

#CAS URL Option 2 Hardcoded

#$uri=[system.URI] "https://casservername/ews/exchange.asmx"
#$service.Url = $uri

## Optional section for Exchange Impersonation

#$service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $MailboxName)
$ExportCollection = @()
Write-Host "Process Contacts"
$folderid= new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Contacts,$MailboxName)
$Contacts = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)

$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)

#Define ItemView to retrive just 1000 Items
$ivItemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView(1000)
$fiItems = $null
do{
$fiItems = $service.FindItems($Contacts.Id,$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 + "-ContactsExport.csv"
$ExportCollection | Export-Csv -NoTypeInformation -Path $fnFileName
"Exported to " + $fnFileName

Скрипт работает, но нужно два усовершенствования:
1. Скрипт должен брать credential из txt файла в формате name.name@domain.ru;password
2. Скрипт выгружает только папку контакты. Как задать, чтобы выгружал все подпапки в контактах?
Специалисты, помогите, пожалуйста!

Отправлено: 13:15, 14-09-2015

 

Ветеран


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

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


1. Скрипт должен брать credential из txt файла в формате name.name@domain.ru;password


Код: Выделить весь код
$pl = Import-Csv password.txt -Delimiter ";" -Header "Login","Password"

#Credentials Option 1 using UPN for the windows Account 
$creds = New-Object System.Net.NetworkCredential($pl.Login,$pl.Password) 
$service.Credentials = $creds
2. Выгрузка не поддерживает русский язык, вместо символов кириллицы "???????".
Код: Выделить весь код
$ExportCollection | Export-Csv -NoTypeInformation -Path $fnFileName
заменить на:
Код: Выделить весь код
$ExportCollection | Export-Csv -NoTypeInformation -Path $fnFileName -Encoding UTF8

Как планируется запускать скрипт ? Правки выше, если есть только 1 пользователь в файле.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:38, 14-09-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


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

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


Изменить txt файл в формат:

Код: Выделить весь код
MailboxName;UserName;Password
mailbox@contoso.com;mailbox@contoso.com;Pass
И уже в цикле передевать значения, скажем:

Код: Выделить весь код
$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
        $service.AutodiscoverUrl($cred.MailboxName,{$true})
Как получить все папки с контактами в которых больше 0:

Код: Выделить весь код
$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)
Как получить элементы из них, код есть выше.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:40, 14-09-2015 | #3


Новый участник


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

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


Я извиняюсь, но всё же можете подсказать, как именно получить элементы из подпапок и выгрузить их в файл?
И как выгрузить данные с нескольких учётных записей (из users.txt) в разные файлы username.csv?

Отправлено: 17:56, 14-09-2015 | #4


Ветеран


Сообщения: 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


Новый участник


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

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


Kazun,
Скрипт, похоже, перебирает все папки и выдаёт несколько тысяч ошибок.
Начинается с Select-object : Не удается найти позиционный параметр, принимающий аргумент "System.Object[]"
А потом лопатит все свойства (BusinessPhone и пр.) и на каждое выдаёт ошибку.
в результате выгрузка не происходит =\
Поможете?
Спасибо огромное!

Отправлено: 12:24, 15-09-2015 | #6


Ветеран


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

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


1) Оставить только одного пользователя
2) В угадайку играть не буду, каждую строку выполняем отдельно и все ошибки сюда.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:00, 15-09-2015 | #7


Новый участник


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

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


1) Оставил 1го пользователя
2)
Скрытый текст
Process Contacts
Select-Object : Не удается найти позиционный параметр, принимающий аргумент "System.Object[]".
C:\soft\final_ps.ps1:95 знак:19
+ $expObj = "" | select DisplayName,GivenName,Surname,Gender,Email1DisplayName, ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: ( [Select-Object], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand

Не удается найти свойство "DisplayName" для данного объекта. Убедитесь, что оно существует и его можно задать.
C:\soft\final_ps.ps1:96 знак:4
+ $expObj.DisplayName = $Item.DisplayName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound

Не удается найти свойство "GivenName" для данного объекта. Убедитесь, что оно существует и его можно задать.
C:\soft\final_ps.ps1:97 знак:4
+ $expObj.GivenName = $Item.GivenName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound

Не удается найти свойство "Surname" для данного объекта. Убедитесь, что оно существует и его можно задать.
C:\soft\final_ps.ps1:98 знак:4
+ $expObj.Surname = $Item.Surname
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound

И далее - остальное вставлять не стал, т.к. ругается на каждый параметр.
После перебора всех свойств выдаёт:
Скрытый текст
Export-Csv : Не удается привязать аргумент к параметру "InputObject", так как он имеет значение NULL.
C:\soft\final_ps.ps1:153 знак:22
+ $ExportCollection | Export-Csv -NoTypeInformation -Path $fnFileName -Encoding U ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: ( [Export-Csv], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ExportCsvCommand

крайняя ошибка выдаётся ещё несколько тысяч раз, после чего выгрузка записывается, но, в результате, пустая.
PS в последней версии скрипта в самом конце была лишняя }
Возможно где-то нет { ?

Последний раз редактировалось rox33, 15-09-2015 в 13:59.


Отправлено: 13:52, 15-09-2015 | #8


Ветеран


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

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


Убрать пробел в строке с Select в месте ,M obilePhone, должно ,MobilePhone,
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:58, 15-09-2015 | #9


Новый участник


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

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


Цитата Kazun:
Убрать пробел в строке с Select в месте ,M obilePhone, должно ,MobilePhone, »
Блин, в блокноте ошибку видно, а в редакторе PowerShell она автоматически "исправлена", при этом не работает =\
После исправления, в скрипте всё работает.

Последний раз редактировалось rox33, 15-09-2015 в 16:50.


Отправлено: 14:12, 15-09-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Exchange. Экспорт контактов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
V. 2007 - Экспорт контактов пользователей в CSV файл (Exchange 2007) rox33 Microsoft Exchange Server 5 25-06-2013 19:23
PowerShell - экспорт контактов из AD dosperados Скриптовые языки администрирования Windows 3 29-12-2011 14:09
V. 2007 - Импорт контактов в Exchange 2007 barya Microsoft Exchange Server 4 13-12-2011 08:37
V. 2007 - [решено] Exchange 2003 не отправляет почту на Exchange 2007 kdsnice Microsoft Exchange Server 6 14-05-2009 11:18
Экспорт Адрес из Exchange nureke Microsoft Exchange Server 2 12-04-2008 09:43




 
Переход