# Microsoft Outlook
# Get calendar entries via PowerShell
Requirements: Basic PowerShell knowhow and Outlook Application.
This documentation shows how to read calendar data from an Outlook attached mailbox in PowerShell.
### Use case
This Outlook API can be used to migrate or evaluate the calendar data inside of an Outlook mapped mailbox. This data can be valuable, for example, when time evaluations should be made using the calendar.
### Custom calendar entries
This PowerShell code gets all entries from a new custom calendar of the users mailbox.
```powershell
$UPN = ""
$Calendarname = ""
$ol = New-Object -comobject Outlook.Application
$ns = $ol.GetNamespace('MAPI')
$folder = $ns.Folders.Item("$UPN").Folders.Item('Calendar').Folders.Item($Calendarname)
$AllItems = $folder.items | Select-Object -Property Subject, Start, Duration
```
### Default calendar entries
This PowerShell code gets all entries from the default calendar of the users mailbox.
```powershell
$UPN = ""
$Calendarname = ""
$ol = New-Object -comobject Outlook.Application
$ns = $ol.GetNamespace('MAPI')
$folder = $ns.Folders.Item("$UPN").Folders.Item('Calendar')
$AllItems = $folder.items | Select-Object -Property Subject, Start, Duration
```
# Get task entries via PowerShell
Requirements: Basic PowerShell knowhow and Outlook Application.
This documentation shows how to read task data from an Outlook attached mailbox in PowerShell.
### Use case
This Outlook API can be used to migrate or evaluate the task data inside of an Outlook mapped mailbox. This data can be valuable, for example, when project evaluation should be made based on data from tasks.
### Custom task list entries
This PowerShell code gets all entries from a new custom task list of the users mailbox.
```powershell
$UPN = ""
$Calendarname = ""
$ol = New-Object -comobject Outlook.Application
$ns = $ol.GetNamespace('MAPI')
$folder = $ns.Folders.Item("$UPN").Folders.Item('tasks').Folders.Item($Calendarname)
$AllItems = $folder.items | Select-Object -Property Subject, Start, Duration
```
### Default task list entries
This PowerShell code gets all entries from the default task list of the users mailbox.
```powershell
$UPN = ""
$Calendarname = ""
$ol = New-Object -comobject Outlook.Application
$ns = $ol.GetNamespace('MAPI')
$folder = $ns.Folders.Item("$UPN").Folders.Item('tasks')
$AllItems = $folder.items | Select-Object -Property Subject, Start, Duration
```
# Update mailbox data via PowerShell
This documentation contains code blocks in PowerShell to get better acquainted with the Outlook API and describes how data can be modified or written.
### Use case
This interface can be handy when calendar items or task folders need to be moved to other folders or when items with certain conditions need to be renamed accordingly.
### Update task property
With this PowerShell script you can append a string to each entry in an Outlook task list. This PowerShell code can be modified to append or rename certain entries based on conditions. This code block is only there to help you understand how to write task data using the Outlook API.
```powershell
$UPN = ""
$TaskFolderName = ""
$ol = New-Object -comobject Outlook.Application
$ns = $ol.GetNamespace('MAPI')
$tasks = $ns.Folders.Item("$UPN").Folders.Item("tasks").Folders.Item("$TaskFolderName").Items
foreach($task in $tasks)
{
$task.subject = $task.subject + ""
$task.save()
}
```
On the variable $task you can modify much more than just the property "subject" as described in this code snippet. The object $task has the following properties, some of them are read only.
```powershell
Application : Microsoft.Office.Interop.Outlook.ApplicationClass
Class : 48
Session : Microsoft.Office.Interop.Outlook.NameSpaceClass
Parent : System.__ComObject
Actions : System.__ComObject
Attachments : System.__ComObject
BillingInformation :
Body :
Categories :
Companies :
ConversationIndex : 01D7B5E1EE74C215AED8CE57C14A94EE669B2CE739AC
ConversationTopic :
CreationTime : 30.09.2021 12:00:00
EntryID : 00000000BDDCD184419E744399016488F52BF3350700709714C02317F5438DBD0748BFEB3A0C0000DE2036870000709714C02317F5438DBD0748BFEB3A0C0002974E719A0000
FormDescription : System.__ComObject
GetInspector : System.__ComObject
Importance : 1
LastModificationTime : 30.09.2021 15:40:50
MAPIOBJECT : System.__ComObject
MessageClass : IPM.Task
Mileage :
NoAging : False
OutlookInternalVersion : 0
OutlookVersion :
Saved : True
Sensitivity : 0
Size : 7514
Subject :
UnRead : False
UserProperties : System.__ComObject
ActualWork : 0
CardData :
Complete : True
Contacts : {}
ContactNames :
DateCompleted : 30.09.2021 00:00:00
DelegationState : 0
Delegator :
DueDate : 01.01.4501 00:00:00
IsRecurring : False
Ordinal : 2147483647
Owner :
Ownership : 0
PercentComplete : 100
Recipients : System.__ComObject
ReminderTime : 01.01.4501 00:00:00
ReminderOverrideDefault : False
ReminderPlaySound : False
ReminderSet : False
ReminderSoundFile :
ResponseState : 0
Role :
SchedulePlusPriority :
StartDate : 01.01.4501 00:00:00
Status : 2
StatusOnCompletionRecipients :
StatusUpdateRecipients :
TeamTask : False
TotalWork : 0
Links :
DownloadState : 1
ItemProperties : System.__ComObject
InternetCodepage : 20127
MarkForDownload : 0
IsConflict : False
AutoResolvedWinner : False
Conflicts : System.__ComObject
PropertyAccessor : System.__ComObject
SendUsingAccount : System.__ComObject
ToDoTaskOrdinal : 01.01.4501 00:00:00
ConversationID : C215AED8CE57C14A94EE669B2CE739AC
RTFBody : {123, 92, 114, 116...}
```
### Update calendar entry property
With this PowerShell script you can append a string to each entry in an Outlook calendar. This PowerShell code can be modified to append or rename certain entries based on conditions. This code block is only there to help you understand how to write calendar data using the Outlook API.
```powershell
$UPN = ""
$Calendarname = ""
$ol = New-Object -comobject Outlook.Application
$ns = $ol.GetNamespace('MAPI')
$calendarentries = $ns.Folders.Item("$UPN").Folders.Item('Calendar').Folders.Item($Calendarname).Items
foreach($calendarentry in $calendarentries){
$calendarentry.Subject = $calendarentry.Subject+ ""
$calendarentry.Save()
}
```
On the variable $calendarentry you can modify much more than just the property "subject" as described in this code snippet. The object $calendarentry has the following properties, some of them are read only.
```
Application : Microsoft.Office.Interop.Outlook.ApplicationClass
Class : 26
Session : Microsoft.Office.Interop.Outlook.NameSpaceClass
Parent : System.__ComObject
Actions : System.__ComObject
Attachments : System.__ComObject
BillingInformation :
Body :
Categories :
Companies :
ConversationIndex : 01D7B5EF7B35E7MEID40851A74372A7528A4DBD0B01D4
ConversationTopic :
CreationTime : 30.09.2021 13:37:02
EntryID : 00000000BDDCD184419E744399016488F52BF3350700709714C02317F5438DBD0748BFEB3A0C00000000010D0000709714C02317F5438DBD0748BFEB3A0C00025A3F31BB0000
FormDescription : System.__ComObject
GetInspector : System.__ComObject
Importance : 1
LastModificationTime : 20.10.2022 07:53:55
MAPIOBJECT : System.__ComObject
MessageClass : IPM.Appointment
Mileage :
NoAging : False
OutlookInternalVersion : 1615629
OutlookVersion : 16.0
Saved : True
Sensitivity : 0
Size : 6644
Subject :
UnRead : False
UserProperties : System.__ComObject
AllDayEvent : False
BusyStatus : 2
Duration : 15
End : 30.09.2021 13:45:00
IsOnlineMeeting : False
IsRecurring : False
Location :
MeetingStatus : 0
NetMeetingAutoStart : False
NetMeetingOrganizerAlias :
NetMeetingServer :
NetMeetingType : 0
OptionalAttendees :
Organizer :
Recipients : System.__ComObject
RecurrenceState : 0
ReminderMinutesBeforeStart : 5
ReminderOverrideDefault : False
ReminderPlaySound : False
ReminderSet : False
ReminderSoundFile :
ReplyTime : 01.01.4501 00:00:00
RequiredAttendees :
Resources :
ResponseRequested : True
ResponseStatus : 0
Start : 30.09.2021 13:30:00
NetMeetingDocPathName :
NetShowURL :
Links :
ConferenceServerAllowExternal : False
ConferenceServerPassword :
ItemProperties : System.__ComObject
EndTimeZone : System.__ComObject
ConversationID : E7MEID40851A74372A7528A4DBD0B01D4
RTFBody : {123, 92, 114, 116...}
BodyFormat : 2
DoNotForwardMeeting : False
FOthersAppt : False
FDelegateAppt : False
OnlineMeetingProvider : 5
DefaultOnlineMeetingEnabled : False
```