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

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

Ответить
Настройки темы
PowerShell - [решено] Создания правил Ootlook через powershell

Аватара для dosperados

Пользователь


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

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


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

Отправлено: 08:37, 04-06-2015

 

Ветеран


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

Профиль | Отправить 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



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

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


Аватара для dosperados

Пользователь


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

Профиль | Отправить 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
Благодарности: 861

Профиль | Отправить 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


Аватара для dosperados

Пользователь


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

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


Добрый день, пошел от обратного) создал в ручную правило, получил его параметры найдя его по имени и понял что я работал не с теми объектами:

мне нужны были вот эти Conditions.SentTo
Код: Выделить весь код
Write-Verbose "Заполнение параметров правила"
$Condition = $rule.Conditions.SentTo
$Condition.Enabled = $true
$Condition.Recipients.Add($SendtoEmail)
Если нужен полный рабочий код скрипта напишите, скину.

Отправлено: 08:05, 05-06-2015 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход