 |
|
dosperados |
04-06-2015 08:37 2514777 |
Создания правил Ootlook через powershell
Добрый день пытаюсь создать правило в Outlook по переносу входящей почты в папку если письмо было адресовано на конкретный адрес. (т.е. используются алиасы и если письмо адресовано на конкретный алиас переложить его в нужную папку)
Код:
$oOutlook = New-Object -ComObject Outlook.Application
$OutlookPath = Split-Path ($oOutlook.Session.DefaultStore).FilePath
Write-Verbose "Получаем MAPI"
$oNameSpace = $oOutlook.GetNamespace("MAPI")
Write-Verbose "Получаем папку Входящие"
$oMAPIFolder = $oNameSpace.GetDefaultFolder(6)
Write-Verbose "Непосредственно проверяем существования папки"
try {
$oMyMAPIFolder = $oMAPIFolder.Folders.Item("_ФЗ-223")
} catch {
Write-Verbose "Если на предидущем этапе ошибка, значит папки нет, => создаем ее."
$oMyMAPIFolder = $oMAPIFolder.Folders.Add("_ФЗ-223")
}
Write-Verbose "Add-Type cmdlet to load the outlook interop assembly"
Add-Type -AssemblyName microsoft.office.interop.outlook
Write-Verbose "Adds the OlDefaultFolders and the OlRuleType type enumerations and stores them in the $olFolders and $olRuleType variables"
$olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" -as [type]
$olRuleType = "Microsoft.Office.Interop.Outlook.OlRuleType" -as [type]
Write-Verbose "Получение папки входящие"
$inbox = $oNameSpace.getDefaultFolder($olFolders::olFolderInbox)
Write-Verbose "Получения объекта ""Rules"" "
$rules = $oOutlook.session.DefaultStore.GetRules()
#region Проверка создавали ли правило ранее
try {
$ExistRule = $rules.get_Item('ФЗ-223_rule')
} catch {
Write-Verbose "Если на предидущем этапе ошибка, значит правило не создано, => создаем ее."
Write-Verbose "Создание правила"
$rule = $rules.Create("ФЗ-223_rule",$olRuleType::OlRuleReceive)
Write-Verbose "Заполнение параметров правила"
Write-Verbose "Поле ОТ:"
$FromCondition = $rule.Conditions
$FromCondition.Enabled = $true
$fromCondition.Recipients.ResolveAll()
$FromCondition.RecipientAddress.("fz223@domen.ru")
$FromCondition.from.Enabled = $true
Write-Verbose "Выбираем папку для перемещения в неё писем"
[string]$RedirectFolder = "_ФЗ-223"
$d = [System.__ComObject].InvokeMember(
"EntryID",
[System.Reflection.BindingFlags]::GetProperty,
$null,
$inbox.Folders.Item($RedirectFolder),
$null)
$MoveTarget = $oNameSpace.getFolderFromID($d)
$MoveRuleAction = $rule.Actions.MoveToFolder
[Microsoft.Office.Interop.Outlook._MoveOrCopyRuleAction].InvokeMember(
"Folder",
[System.Reflection.BindingFlags]::SetProperty,
$null,
$MoveRuleAction,
$MoveTarget)
$MoveRuleAction.Enabled = $true
Write-Verbose "Сохраняем правило"
$rules.Save()
Выдает вот такую ошибку.
Код:
Исключение при вызове "Save" с "0" аргументами: "Невозможно сохранить одно или несколько правил из-за недопустимости действий или условий."
строка:86 знак:1
+ $rules.Save()
+ ~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : COMException
|
$FromCondition.RecipientAddress.("fz223@domen.ru") заменить на $FromCondition.RecipientAddress.Add("fz223@domen.ru")
За основу берите скрипт - https://dandarache.wordpress.com/201...es-in-outlook/
Отработает при условии,что папка _ФЗ-223 является подпапкой INBOX.
Код:
$RuleName = "ФЗ-223_rule"
$RedirectFolder = "_ФЗ-223"
$FromEmail = "fz223@domen.ru"
$rules = $outlook.session.DefaultStore.GetRules()
$rule = $rules.Create($RuleName,$olRuleType::OlRuleReceive)
$d = [System.__ComObject].InvokeMember(
"EntryID",
[System.Reflection.BindingFlags]::GetProperty,
$null,
$inbox.Folders.Item($RedirectFolder),
$null
)
$MoveTarget = $namespace.getFolderFromID($d)
$MoveRuleAction = $rule.Actions.MoveToFolder
[Microsoft.Office.Interop.Outlook._MoveOrCopyRuleAction].InvokeMember(
"Folder",
[System.Reflection.BindingFlags]::SetProperty,
$null,
$MoveRuleAction,
$MoveTarget)
$MoveRuleAction.Enabled = $true
$FromCondition = $rule.Conditions.From
$FromCondition.Enabled = $true
$FromCondition.Recipients.Add($FromEmail)
$fromCondition.Recipients.ResolveAll()
$rules.Save()
|
dosperados |
04-06-2015 09:55 2514799 |
Kazun, Так и брал за основу скрипт с этого сайта но так как вы написали тоже не работает.
Код:
$Outlook = New-Object -ComObject Outlook.Application
$olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" -as [type]
$olRuleType = "Microsoft.Office.Interop.Outlook.OlRuleType" -as [type]
Write-Verbose "Получение папки входящие"
$inbox = $oNameSpace.getDefaultFolder($olFolders::olFolderInbox)
$RuleName = "ФЗ-223_rule"
$RedirectFolder = "_ФЗ-223"
$FromEmail = "fz223@domen.ru"
$rules = $outlook.session.DefaultStore.GetRules()
$rule = $rules.Create($RuleName,$olRuleType::OlRuleReceive)
$d = [System.__ComObject].InvokeMember(
"EntryID",
[System.Reflection.BindingFlags]::GetProperty,
$null,
$inbox.Folders.Item($RedirectFolder),
$null
)
$MoveTarget = $namespace.getFolderFromID($d)
$MoveRuleAction = $rule.Actions.MoveToFolder
[Microsoft.Office.Interop.Outlook._MoveOrCopyRuleAction].InvokeMember(
"Folder",
[System.Reflection.BindingFlags]::SetProperty,
$null,
$MoveRuleAction,
$MoveTarget)
$MoveRuleAction.Enabled = $true
$FromCondition = $rule.Conditions.From
$FromCondition.Enabled = $true
$FromCondition.Recipients.Add($FromEmail)
$fromCondition.Recipients.ResolveAll()
$rules.Save()
Пишет ошибка в условии или действии
Код:
Исключение при вызове "Save" с "0" аргументами: "Невозможно сохранить одно или несколько правил из-за недопустимости действий или у
словий."
\69d25aaf-ebb6-4b49-8f09-41dd00242570.ps1:39 знак:5
+ $rules.Save()
+ ~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : COMException
|
"_ФЗ-223" - где располагается данная папка?
И скрипт содержит ошибки и отсутсвуют команды.
Код:
$oOutlook = New-Object -ComObject Outlook.Application
$olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" -as [type]
$olRuleType = "Microsoft.Office.Interop.Outlook.OlRuleType" -as [type]
Write-Verbose "Получение папки входящие"
$oNameSpace = $oOutlook.GetNamespace("MAPI")
$inbox = $oNameSpace.getDefaultFolder($olFolders::olFolderInbox)
$RuleName = "ФЗ-223_rule"
$RedirectFolder = "_ФЗ-223"
$FromEmail = "fz223@domen.ru"
$rules = $outlook.session.DefaultStore.GetRules()
$rule = $rules.Create($RuleName,$olRuleType::OlRuleReceive)
$d = [System.__ComObject].InvokeMember(
"EntryID",
[System.Reflection.BindingFlags]::GetProperty,
$null,
$inbox.Folders.Item($RedirectFolder),
$null
)
$MoveTarget = $namespace.getFolderFromID($d)
$MoveRuleAction = $rule.Actions.MoveToFolder
[Microsoft.Office.Interop.Outlook._MoveOrCopyRuleAction].InvokeMember(
"Folder",
[System.Reflection.BindingFlags]::SetProperty,
$null,
$MoveRuleAction,
$MoveTarget)
$MoveRuleAction.Enabled = $true
$FromCondition = $rule.Conditions.From
$FromCondition.Enabled = $true
$FromCondition.Recipients.Add($FromEmail)
$fromCondition.Recipients.ResolveAll()
$rules.Save()
|
dosperados |
05-06-2015 08:05 2515137 |
Добрый день, пошел от обратного) создал в ручную правило, получил его параметры найдя его по имени и понял что я работал не с теми объектами:
мне нужны были вот эти Conditions.SentTo
Код:
Write-Verbose "Заполнение параметров правила"
$Condition = $rule.Conditions.SentTo
$Condition.Enabled = $true
$Condition.Recipients.Add($SendtoEmail)
Если нужен полный рабочий код скрипта напишите, скину.
|
Время: 18:12.
© OSzone.net 2001-