|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Создания правил Ootlook через powershell |
|
PowerShell - [решено] Создания правил Ootlook через powershell
|
Пользователь Сообщения: 77 |
Добрый день пытаюсь создать правило в 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() |
|
Отправлено: 08:37, 04-06-2015 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать $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() |
Последний раз редактировалось Kazun, 04-06-2015 в 09:13. Отправлено: 08:44, 04-06-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать 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 |
Отправлено: 09:55, 04-06-2015 | #3 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать "_ФЗ-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() |
Отправлено: 10:42, 04-06-2015 | #4 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Добрый день, пошел от обратного) создал в ручную правило, получил его параметры найдя его по имени и понял что я работал не с теми объектами:
мне нужны были вот эти Conditions.SentTo Если нужен полный рабочий код скрипта напишите, скину. |
|
Отправлено: 08:05, 05-06-2015 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - [решено] Отправка почты через PowerShell | Pavelnt | Скриптовые языки администрирования Windows | 6 | 17-08-2019 12:05 | |
PowerShell - [решено] Удаленный запуск cmd,msi через PowerShell? | smol84 | Скриптовые языки администрирования Windows | 7 | 12-12-2013 23:01 | |
PowerShell - Инвентаризация копмьютерного парка через PowerShell 2.0 | JackieInIT | Скриптовые языки администрирования Windows | 4 | 18-10-2012 08:55 | |
PowerShell - [решено] Screenshot через Powershell | laipisas02 | Скриптовые языки администрирования Windows | 1 | 22-04-2010 16:09 | |
Доступ - Глюк с одним из правил встроенного брандмауэра,вообще не настраивается одно из правил | интерактивный | Microsoft Windows 7 | 0 | 11-07-2009 07:06 |
|