Búsqueda de sitios web

Cómo leer eventos del calendario del usuario usando Powershell y Graph API


A muchas organizaciones les resulta útil implementar algún tipo de automatización en torno a los calendarios de los usuarios.

El propósito podría ser realizar un seguimiento de la productividad, actualizar los paneles de notificaciones, ver tendencias, etc.

Con Microsoft Graph PowerShell, es bastante fácil acceder a los calendarios de los usuarios, si sabes cómo hacerlo ?

Aquí hay una guía paso a paso:

Secuencias de comandos para calendarios de Office 365: guía paso a paso

Para habilitar el acceso programático a todos los calendarios de su organización, debe implementar lo siguiente:

  1. Genere un certificado que se utilizará para la autenticación OAuth2
  2. Configurar una aplicación cliente
  3. Asignar permisos API a la aplicación.
  4. Configurar una identidad de certificado en la aplicación

1. Genere un certificado que se utilizará para la autenticación Oauth2

Con PowerShell, puede generar rápidamente un certificado autofirmado que funciona bien para la autenticación de aplicaciones.

Necesitará dos archivos del certificado:

  • Un archivo .pfx: incluye la clave privada y se almacena de forma segura en el almacén de certificados personales de su cuenta de programación en el servidor de programación.
  • Un archivo .cer: incluye solo la clave pública y se carga en la aplicación de Azure para permitirle autenticarse utilizando la clave privada (secreta) correspondiente.

Genere un nuevo certificado y exporte los archivos .pfx y .cer usando el siguiente código:

# Create certificate with expiry of 5 years
$mycert = New-SelfSignedCertificate -DnsName "easy365manager.com" -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(5) -KeySpec KeyExchange
# Export certificate to .pfx file
$mycert | Export-PfxCertificate -FilePath C:\tmp\ExoAutomateCert.pfx -Password $(ConvertTo-SecureString -String "$omeP@ssw0rd" -AsPlainText -Force)
# Export certificate to .cer file
$mycert | Export-Certificate -FilePath C:\tmp\ExoAutomateCert.cer

El certificado se crea en el almacén de certificados personal del usuario que ejecuta el código.

Si planea automatizar secuencias de comandos utilizando la cuenta que inició sesión en el sistema que inició sesión, no necesitará el archivo .pfx (excepto para la copia de seguridad).

Para utilizar el certificado en otro sistema/cuenta de usuario, debe iniciar sesión de forma interactiva e importar el certificado desde el archivo .pfx.

El archivo .cer se usará para configurar la autenticación en la aplicación de Azure en un paso posterior.

2. Configurar una aplicación de cliente

Debe iniciar sesión en Azure Portal para configurar una nueva aplicación de Azure. Luego, seleccione Azure Active Directory, haga clic en Registros de aplicaciones o siga este enlace directo.

Desde allí, puede crear un nuevo registro de aplicación haciendo clic en Nuevo registro:

Complete el registro de la solicitud:

La nueva aplicación de Azure ya ha sido creada:

Observe el ID de la aplicación (cliente). Esto es lo que usaremos como parámetro -AppId cuando nos conectemos a Exchange Online con PowerShell.

3. Asignar permisos API a la aplicación

Usaremos Graph API para acceder a los calendarios de los usuarios. Esto es mucho más fácil de usar que métodos más antiguos como Exchange Web Services (EWS).

Seleccione permisos de API, haga clic en Agregar un permiso y seleccione Microsoft Graph:

Seleccione Permisos de la aplicación:

Luego, desplácese hacia abajo para encontrar los permisos de Calendarios. Selecciona Calendarios. Leer si solo vas a revisar/exportar información:

Ahora tenemos los permisos necesarios para acceder a la información del calendario. Si también desea que su secuencia de comandos extraiga información del usuario, puede agregar los siguientes permisos:

Haga clic en Agregar permisos para confirmar los nuevos permisos de API.

Luego otorgue el consentimiento del administrador para los nuevos permisos:

El estado de los permisos cambiará a Concedido y la nueva aplicación cliente ya estará configurada.

Sólo necesitamos otorgar acceso para usarlo.

4. Configure una identidad de certificado en la aplicación

Para habilitar la autenticación utilizando el certificado generado en el paso 1, debemos realizar los siguientes pasos:

Haga clic en Certificados y secretos, haga clic en Certificados, haga clic en Cargar certificado, busque el archivo .cer del paso 1, agregue una descripción y haga clic en Agregar:

Ahora verá el certificado en la lista, incluida la huella digital que usaremos como parámetro en nuestro script:

Leer información del calendario con Microsoft Graph PowerShell

¡Estamos listos para rockear!

Utilice el módulo Microsoft Graph PowerShell para acceder a los calendarios de los usuarios.

Conéctese a su nueva aplicación cliente con el certificado usando el siguiente comando:

PS C:\> Connect-MgGraph -TenantId "8a35f394-855d-4d13-9f6f-86d8eb24dc6b" -ClientId "23b3f624-502d-42fb-83ac-ea9f6aff9e5b" -CertificateThumbprint "08451D7079F093EBB2A2CB0266C885ECA098DD9E"
Welcome To Microsoft Graph!

Para extraer información del calendario, utilice Get-MgUserCalendarView CmdLet.

El siguiente ejemplo enumera todas las entradas del calendario de hoy para el usuario Hans C. Ørsted (solo se muestra una entrada):

PS C:\> $StartDate = Get-Date -Date 00:00:00
PS C:\> $EndDate = Get-Date -Date 23:59:59
PS C:\> Get-MgUserCalendarView -UserId hans.c.orsted@azure.skrubbeltrang.com -CalendarId "Calendar" -StartDateTime $StartDate -EndDateTime $EndDate | fl


AllowNewTimeProposals         : True
Attachments                   :
Attendees                     : {Microsoft.Graph.PowerShell.Models.MicrosoftGraphAttendee, Microsoft.Graph.PowerShell.Models.MicrosoftGraphAttendee, Microsoft.Graph.PowerShell.Models.MicrosoftGraphAttendee}
Body                          : Microsoft.Graph.PowerShell.Models.MicrosoftGraphItemBody
BodyPreview                   : Do some more testing on electro magnetism.
Calendar                      : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCalendar
Categories                    : {}
ChangeKey                     : xa95c+RziUeacUESMPKGkwAAGGtkxw==
CreatedDateTime               : 11/8/2022 7:19:51 AM
End                           : Microsoft.Graph.PowerShell.Models.MicrosoftGraphDateTimeZone
Extensions                    :
HasAttachments                : False
HideAttendees                 : False
ICalUId                       : 040000008200E00074C5B7101A82E00800000000000135B14AF3D801000000000000000010000000D7E511407918FD4F9318BD4EEDFB3229
Id                            : AAMkAGY5MjM3MjVmLTcxMzQtNDEwNC1iNDQwLTU1NjNhOGRmYzM5ZABGAAAAAAAHk64FGa4vQJkMsperiKxZBwDFr3lz5HOJR5pxQRIw8oaTAAAAAAENAADFr3lz5HOJR5pxQRIw8oaTAAAYa3q5AAA=
Importance                    : normal
Instances                     :
IsAllDay                      : False
IsCancelled                   : False
IsDraft                       : False
IsOnlineMeeting               : False
IsOrganizer                   : True
IsReminderOn                  : True
LastModifiedDateTime          : 11/8/2022 7:21:52 AM
Location                      : Microsoft.Graph.PowerShell.Models.MicrosoftGraphLocation
Locations                     : {Science room 23}
MultiValueExtendedProperties  :
OnlineMeeting                 : Microsoft.Graph.PowerShell.Models.MicrosoftGraphOnlineMeetingInfo
OnlineMeetingProvider         : unknown
OnlineMeetingUrl              :
Organizer                     : Microsoft.Graph.PowerShell.Models.MicrosoftGraphRecipient
OriginalEndTimeZone           : Romance Standard Time
OriginalStart                 :
OriginalStartTimeZone         : Romance Standard Time
Recurrence                    : Microsoft.Graph.PowerShell.Models.MicrosoftGraphPatternedRecurrence
ReminderMinutesBeforeStart    : 15
ResponseRequested             : True
ResponseStatus                : Microsoft.Graph.PowerShell.Models.MicrosoftGraphResponseStatus
Sensitivity                   : normal
SeriesMasterId                :
ShowAs                        : busy
SingleValueExtendedProperties :
Start                         : Microsoft.Graph.PowerShell.Models.MicrosoftGraphDateTimeZone
Subject                       : Meeting with assistant
TransactionId                 :
Type                          : singleInstance
WebLink                       : https://outlook.office365.com/owa/?itemid=AAMkAGY5MjM3MjVmLTcxMzQtNDEwNC1iNDQwLTU1NjNhOGRmYzM5ZABGAAAAAAAHk64FGa4vQJkMsperiKxZBwDFr3lz5HOJR5pxQRIw8oaTAAAAAAENAADFr3lz5HOJR5pxQRIw8oaTAAAYa3q5AAA%3D&exvsurl=1&path=/calendar/item
AdditionalProperties          : {[@odata.etag, W/"xa95c+RziUeacUESMPKGkwAAGGtkxw=="]}

Además de mucha información técnica, verá propiedades útiles en el resultado anterior:

  • Comenzar
  • Fin
  • Sujeto
  • Vista previa del cuerpo
  • Asistentes
  • Ubicación

y más.

¡Diviértete creando aplicaciones y scripts con integración de calendario!

Artículos relacionados