
Estoy cansado de intentar utilizar la GUI de Outlook para crear/eliminar/administrar reglas de la bandeja de entrada; lleva una eternidad y apesta.
Entiendo que hay cmdlets en PowerShell que le permiten hacer esto tanto en el lado del servidor como en el del cliente.
No tengo acceso al lado del servidor, solo me interesa administrar mi propia bandeja de entrada con estas reglas.
El siguiente artículo parece mencionar algunos cmdlets que serían geniales para esto, pero no puedo usarlos porque no sé desde dónde importar las bibliotecas:
https://www.codetwo.com/admins-blog/managing-outlook-rules-powershell/
¿Cómo instalo los cmdlets primero? ¿Dónde puedo obtenerlos y con qué necesito importarlos a un script?
Respuesta1
Colocar esto aquí porque es demasiado largo para esa sección de comentarios.
Controlar su buzón es cuestión de decir: ¿está hablando solo de usted en su cliente independiente (fat, cloud o ambos? recuerde que puede agregar su cuenta de Outlook.com directamente en su cliente fat de Outlook) o para los usuarios de su empresa. .
No utiliza cmdlets de Exchange para controlar Outlook local. Para utilizar los cmdlets de Exchange debe instalar el Shell de administración de Exchange en su computadora...
...o utilice la comunicación remota implícita de PowerShell para enviar esos cmdlets a su host. La comunicación remota implícita también es la forma en que se utilizan los cmdlets de Exchange para O365.Estos están bien documentados/detalles por Microsoft y muchos blogs en toda la web y en videos de Youtube.
Conéctese a Office 365 PowerShell
Conéctese a todos los servicios de Office 365 en una única ventana de Windows PowerShell
Conéctese a todos los servicios de Office 365 PowerShell (también admite MFA)
Incluso un módulo prediseñado para este esfuerzo.
Conéctese a los servicios de Office 365 mediante PowerShell
Script de PowerShell con funciones auxiliares para conectarse a Office 365 o Exchange local. Facilita la conexión a diferentes servicios de Office 365 utilizando las mismas credenciales (no MFA). Ya no es necesario recordar varias formas de conectarse a cada carga de trabajo.
Administrar las reglas de Outlook de los usuarios desde Exchange Management Shell (con PowerShell)
Outlook en línea tiene una API Rest para trabajar al igual que Exchange, EWS
Descripción general de las API de administración de Office 365
cliente de perspectiva
Las API REST de Outlook ofrecen una manera fácil de acceder a los datos de correo, calendario y contactos para cualquier usuario de Office 365 o outlook.com. En este vídeo, repasaremos algunas de las funciones clave que se introducen en la versión 2.0 de la API: webhooks, fotos, recordatorios y zona horaria.
Utilice PowerShell para extraer datos de su bandeja de entrada de 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
Debes ser administrador en O365 para hacer esto. Outlook en O365 no es Exchange, al igual que Outlook en su escritorio no es Exchange. Debe usar Outlook COM (como se indicó anteriormente y a continuación) para trabajar en el cliente Outlook; esto no es aplicable en línea.
PowerShell recupera direcciones de Outlook
Respuesta2
Hasta donde yo sé, no existe un módulo de PowerShell estándar disponible para Outlook; sin embargo, puede utilizar la API de Outlook que brinda acceso al Microsoft.Office.Interop.Outlook
espacio de nombres. Un breve ejemplo para crear una nueva regla es el siguiente:
Primero obtenemos el espacio de nombres:
Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
Ahora especificamos la carpeta de origen (Bandeja de entrada), creamos una nueva regla y especificamos la carpeta a copiar (Notificaciones)
$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()
Puede encontrar más ejemplos e información sobre el uso del espacio de nombres de Outlook en PowerShell aquí: https://docs.microsoft.com/en-us/archive/msdn-magazine/2013/march/powershell-managing-an-outlook-mailbox-with-powershell
Además, puedes encontrar toda la información sobre el modelo de objetos de Outlook aquí: https://docs.microsoft.com/nl-nl/office/vba/api/overview/Outlook/object-model