Hello All,
As always, thank you very much for the help that is always provided in this forum. I have question regarding a script I wrote that copies all events from a shared outlook calendar to my outlook calendar and sets reminders so I can be reminded of important work events. Now the script works, but I want to add another feature to the script. That would be checking for changes in time and or cancellations of meetings and updating accordingly.
The code is below, and like I said it works, but I am just looking for input on how you would go about looking for these changes and modifying them. I am very much still an amateur with powershell so I accept any and all criticism.
try{
# Powershell creates outlook object so we can interact with it
$objOutlook= New-Object -ComObject Outlook.Application -ErrorAction Stop
}catch{
Write-Warning "May need to edit registry key 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows'
Or check your permissions to lifesize calendar. Check Desktop for Errors"
}
# Grabbing the system date
$date = Get-Date
# looks a month back and changes format of date
$startDate = $date.Adddays(-2).toshortdatestring()
# Tells powershell what namespace to use. MAPI is the only namespace for the outlook application to use
$objNamespace = $objOutlook.GetNameSpace("MAPI")
# Gets the default calendar of the user running the script
$objDefault = $objNamespace.GetDefaultFolder("olFolderCalendar")
# Collects the Conversation Index of each event in default calendar
$colDefault = $objDefault.Items | Where-Object {$_.start -ge $StartDate}
# Grabs all the items from the lifesize calendar
$objFolder = $objNamespace.Folders.Item("CA - Mobile Lifesize Unit #1").folders.Item("calendar")
# Collects all the events from the Lifesize calendar into a collection for us to use in the foreach loop.
$colItems = $objFolder.Items | Where-Object {($_.start -gt $startDate) -and (($_.Isrecurring -eq $false) -or ($_.isrecurring -eq $true))}
foreach($Event in $colItems){
# Grabs Subject line from the event and displays it on screen later on in the code.
$subject = $event.subject
Try{
# determines if the event from the lifesize calendar exists on the default calendar
If($colDefault.conversationIndex -notcontains $Event.ConversationIndex){
Write-Host "Adding $subject to your calendar" -ForegroundColor Cyan # Displays on screen what event is being added
$Event.ReminderSet = $true # Enables the reminder
$Event.ReminderMinutesBeforeStart = 30 # Sets reminder time to 30 minutes.
$Event.Copyto($objDefault, 2) # Copies the even to the users default calendar
$response = $event.respond(3, $true) # response parameters telling the job to accept the meeting but not send a respone.
$Event.Save() # Saves the event to the default calendar of the user.
Add-Content C:\Users\morellana\Desktop\Logs\InviteLog.txt -Value "$subject - has been added to your calendar" `n
}# /if
else{ Write-Host "Event $subject has already be added to your Calendar" -ForegroundColor White }# /elseif
} Catch {
Write-Error "Could not add LifeSize events to your Calendar"
}
}# /foreach