dosperados
04-06-2015, 08:37
Добрый день пытаюсь создать правило в 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
$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