![哪个 powershell 模块可用于驯服您的收件箱?](https://linux22.com/image/1615748/%E5%93%AA%E4%B8%AA%20powershell%20%E6%A8%A1%E5%9D%97%E5%8F%AF%E7%94%A8%E4%BA%8E%E9%A9%AF%E6%9C%8D%E6%82%A8%E7%9A%84%E6%94%B6%E4%BB%B6%E7%AE%B1%EF%BC%9F.png)
我厌倦了尝试使用 Outlook 的 GUI 来创建/删除/管理收件箱规则;这需要很长时间并且很糟糕。
我知道 powershell 中有一些 cmdlet 允许您在服务器端和客户端执行此操作。
我无法访问服务器端,我只想用这些规则管理我自己的收件箱。
以下文章似乎提到了一些对此很有用的 cmdlet,但我无法使用它们,因为我不知道从哪里导入库:
https://www.codetwo.com/admins-blog/managing-outlook-rules-powershell/
我首先如何安装 cmdlet?我在哪里可以获取它们,以及我需要用什么将它们导入到脚本中?
答案1
将其放在这里是因为它对于该评论部分来说太长了。
驯服您的邮箱就是问您是只在独立客户端(胖客户端、云客户端还是两者 - 请记住,您可以在 Outlook 胖客户端中直接添加 Outlook.com 帐户)上与您自己交谈,还是与您企业中的用户交谈。
您不使用 Exchange cmdlet 来控制本地 Outlook。要使用 Exchange cmdlet,您必须在计算机上安装 Exchange 命令行管理程序...
...或者使用 PowerShell Implicit Remoting 将这些 cmdlet 代理到您的主机。隐式远程处理也是您使用 Exchange cmdlet 进行 O365 的方式。微软对这些内容提供了详尽的文档和详细信息,网络上和 Youtube 视频中也有大量博客对此进行了介绍。
甚至为此努力预先构建了模块。
使用 PowerShell 连接到 Office 365 服务
带有辅助功能的 PowerShell 脚本可连接到 Office 365 或 Exchange On-Premises。使用相同的凭据(非 MFA)可以轻松连接到不同的 Office 365 服务。无需再记住连接到每个工作负载的各种方式。
Outlook Online 有一个 Rest API 可以使用,Exchange、EWS 也有。
Outlook 客户端
Outlook REST API 为任何 Office 365 或 outlook.com 用户提供了一种轻松访问邮件、日历和联系人数据的方法。在本视频中,我们将介绍 API V2.0 中引入的一些关键功能:Webhook、照片、提醒和时区。
使用 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 中的管理员才能执行此操作。O365 中的 Outlook 不是 Exchange,就像桌面上的 Outlook 不是 Exchange 一样。您必须使用 Outlook COM(如上所述和下文所述)才能在 Outlook 客户端上工作,这对于在线来说不是一回事。
答案2
据我所知,Outlook 没有可用的标准 powershell 模块,但是您可以使用允许访问Microsoft.Office.Interop.Outlook
命名空间的 Outlook API。创建新规则的一个简短示例如下:
首先我们获取命名空间:
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()
您可以在此处找到有关在 powershell 中使用 outlook 命名空间的更多示例和信息: 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