Какой модуль PowerShell можно использовать для укрощения вашего почтового ящика?

Какой модуль PowerShell можно использовать для укрощения вашего почтового ящика?

Мне надоело пытаться использовать графический интерфейс Outlook для создания/удаления/управления правилами для папки «Входящие»; это занимает целую вечность и ужасно.

Насколько я понимаю, в PowerShell есть командлеты, которые позволяют делать это как на стороне сервера, так и на стороне клиента.

У меня нет доступа к серверной части, меня интересует только управление моим собственным почтовым ящиком с помощью этих правил.

В следующей статье упоминаются некоторые командлеты, которые отлично подошли бы для этой цели, но я не могу их использовать, так как не знаю, откуда импортировать библиотеки:

https://www.codetwo.com/admins-blog/managing-outlook-rules-powershell/

Как мне сначала установить командлеты? Где их можно получить и что мне нужно, чтобы импортировать их в скрипт?

решение1

Размещаю это здесь, потому что это слишком длинно для раздела комментариев.

Приручение вашего почтового ящика — это вопрос того, говорите ли вы только о себе в вашем автономном клиенте (толстом, облачном или обоих — помните, что вы можете добавить свою учетную запись Outlook.com непосредственно в свой толстый клиент Outlook) или о пользователях вашего предприятия.

Вы не используете командлеты Exchange для управления локальным Outlook. Для использования командлетов Exchange необходимо установить Exchange Management Shell на вашем компьютере...

Установите инструменты управления Exchange

...или используйте PowerShell Implicit Remoting для проксирования этих командлетов на ваш хост. Implicit remoting — это то, как вы используете командлеты Exchange для O365.Они хорошо документированы/подробно описаны корпорацией Microsoft, а также во множестве блогов в Интернете и в видеороликах на YouTube.

Подключиться к PowerShell для Office 365

Подключитесь ко всем службам Office 365 в одном окне Windows PowerShell

Подключайтесь ко всем службам Office 365 PowerShell (также поддерживает MFA)

Даже готовый модуль для этой цели.

Connect-O365 1.7.9

Подключитесь к службам Office 365 с помощью PowerShell

Скрипт PowerShell с вспомогательными функциями для подключения к Office 365 или Exchange On-Premises. Позволяет легко подключаться к различным службам Office 365 с использованием тех же учетных данных (без MFA). Больше не нужно запоминать различные способы подключения к каждой рабочей нагрузке.

Управление правилами Outlook пользователей из Exchange Management Shell (с PowerShell)

Youtube - Powershell O365

Outlook Online имеет Rest API для работы, как и Exchange, EWS

Обзор API управления Office 365

Outlook-клиент

YouTube-

API REST Outlook предлагают простой способ доступа к данным Почты, Календаря и Контактов для любого пользователя Office 365 или outlook.com. В этом видео мы рассмотрим некоторые ключевые функции, представленные в API V2.0: WebHooks, Фотографии, Напоминания и Часовой пояс.

Используйте PowerShell для анализа данных в вашем почтовом ящике Outlook

# Get-OutlookInBox function
Function Get-OutlookInBox
{
  <#

   .Synopsis
    This function returns InBox items from default Outlook profile

   .Description
    This function returns InBox items from default Outlook profile. It
    uses the Outlook interop assembly to use the olFolderInBox enumeration.

    It creates a custom object consisting of Subject, ReceivedTime, Importance,
    SenderName for each InBox item.

    *** Important *** depending on the size of your InBox items this function
    may take several minutes to gather your InBox items. If you anticipate
    doing multiple analysis of the data, you should consider storing the
    results into a variable, and using that.

   .Example
    Get-OutlookInbox |
    where { $_.ReceivedTime -gt [datetime]”5/5/11″ -AND $_.ReceivedTime -lt `

    [datetime]”5/10/11″ } | sort importance

    Displays Subject, ReceivedTime, Importance, SenderName for all InBox items that
    are in InBox between 5/5/11 and 5/10/11 and sorts by importance of the email.

   .Example
    Get-OutlookInbox | Group-Object -Property SenderName | sort-Object Count

    Displays Count, SenderName and grouping information for all InBox items. The most
    frequently used contacts appear at bottom of list.

   .Example
    $InBox = Get-OutlookInbox

    Stores Outlook InBox items into the $InBox variable for further
    “offline” processing.

   .Example
    ($InBox | Measure-Object).count

    Displays the number of messages in InBox Items

   .Example
    $InBox | where { $_.subject -match ‘2011 Scripting Games’ } |
    sort ReceivedTime -Descending | select subject, ReceivedTime -last 5
    Uses $InBox variable (previously created) and searches subject field
    for the string ‘2011 Scripting Games’ it then sorts by the date InBox.
    This sort is descending which puts the oldest messages at bottom of list.
    The Select-Object cmdlet is then used to choose only the subject and ReceivedTime
    properties and then only the last five messages are displayed. These last
    five messages are the five oldest messages that meet the string.

   .Notes
    NAME:  Get-OutlookInbox
    AUTHOR: ed wilson, msft
    LASTEDIT: 05/13/2011 08:36:42
    KEYWORDS: Microsoft Outlook, Office
    HSG: HSG-05-26-2011

   .Link
     Http://www.ScriptingGuys.com/blog

 #Requires -Version 2.0

 #>

 Add-type -assembly “Microsoft.Office.Interop.Outlook” | out-null

 $olFolders = “Microsoft.Office.Interop.Outlook.olDefaultFolders” -as [type]

 $outlook = new-object -comobject outlook.application

 $namespace = $outlook.GetNameSpace(“MAPI”)

 $folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
 $folder.items |

 Select-Object -Property Subject, ReceivedTime, Importance, SenderName

} #end function Get-OutlookInbox

Для этого вы должны быть администратором в O365. Outlook в O365 — это не Exchange, как и Outlook на вашем рабочем столе — это не Exchange. Для работы в клиенте Outlook вам необходимо использовать Outlook COM (как указано выше и далее), для Online это не подходит.

PowerShell извлекает адреса Outlook

Как: отправлять почту из Powershell с помощью Outlook

Управление объектами Outlook с помощью Powershell

решение2

Насколько мне известно, для Outlook нет стандартного модуля powershell, однако вы можете использовать API Outlook, который предоставляет доступ к пространству Microsoft.Office.Interop.Outlookимен. Короткий пример создания нового правила выглядит следующим образом:

Сначала получаем пространство имен:

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")

Теперь мы указываем исходную папку (Входящие), создаем новое правило и указываем папку для копирования (Уведомления).

$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$MyFolder1 =
  $namespace.Folders.Item('[email protected]').Folders.Item('NOTIFICATIONS')
$rules = $namespace.DefaultStore.GetRules()
$rule = $rules.create("My rule1: Receiving Notification",
  [Microsoft.Office.Interop.Outlook.OlRuleType]::olRuleReceive)

$rule_body = $rule.Conditions.Subject
$rule_body.Enabled = $true
$rule_body.Text = @('Completed Notification')
$action = $rule.Actions.CopyToFolder
$action.enabled = $true
  [Microsoft.Office.Interop.Outlook._MoveOrCopyRuleAction].InvokeMember(
    "Folder",
    [System.Reflection.BindingFlags]::SetProperty,
    $null,
    $action,
    $MyFolder1)
$rules.Save()

Дополнительные примеры и информацию об использовании пространства имен Outlook в PowerShell можно найти здесь: https://docs.microsoft.com/en-us/archive/msdn-magazine/2013/march/powershell-managing-an-outlook-mailbox-with-powershell

Кроме того, всю информацию об объектной модели Outlook вы можете найти здесь: https://docs.microsoft.com/nl-nl/office/vba/api/overview/Outlook/object-model

Связанный контент