Public/Calendar/New-GSCalendarEvent.ps1
function New-GSCalendarEvent { <# .SYNOPSIS Creates a new calendar event .DESCRIPTION Creates a new calendar event .PARAMETER Summary Event summary .PARAMETER Description Event description .PARAMETER User The primary email or UserID of the user. You can exclude the '@domain.com' to insert the Domain in the config or use the special 'me' to indicate the AdminEmail in the config. Defaults to the AdminEmail in the config. .PARAMETER CalendarID The calendar ID of the calendar you would like to list events from. Defaults to the user's primary calendar. .PARAMETER AttendeeEmails The email addresses of the attendees to add. NOTE: This performs simple adds without additional attendee options. If additional options are needed, use the Attendees parameter instead. .PARAMETER Attendees The EventAttendee object(s) to add. Use Add-GSEventAttendee with this parameter for best results. .PARAMETER Location Event location .PARAMETER EventColor Color of the event as seen in Calendar .PARAMETER LocalStartDateTime Start date and time of the event. Lowest precendence of the three StartDate parameters. Defaults to the time the function is ran. .PARAMETER LocalEndDateTime End date and time of the event. Lowest precendence of the three EndDate parameters. Defaults to 30 minutes after the time the function is ran. .PARAMETER StartDate String representation of the start date. Middle precendence of the three StartDate parameters. .PARAMETER EndDate String representation of the end date. Middle precendence of the three EndDate parameters. .PARAMETER UTCStartDateTime String representation of the start date in UTC. Highest precendence of the three StartDate parameters. .PARAMETER UTCEndDateTime String representation of the end date in UTC. Highest precendence of the three EndDate parameters. .EXAMPLE New-GSCalendarEvent "Go to the gym" -StartDate (Get-Date "21:00:00") -EndDate (Get-Date "22:00:00") Creates an event titled "Go to the gym" for 9-10PM the day the function is ran. #> [cmdletbinding(DefaultParameterSetName = "AttendeeEmails")] Param ( [parameter(Mandatory = $true,Position = 0)] [String] $Summary, [parameter(Mandatory = $false)] [String] $Description, [parameter(Mandatory = $false,ValueFromPipelineByPropertyName = $true)] [Alias("PrimaryEmail","UserKey","Mail")] [ValidateNotNullOrEmpty()] [String[]] $User = $Script:PSGSuite.AdminEmail, [parameter(Mandatory = $false,ValueFromPipelineByPropertyName = $true)] [String[]] $CalendarID = "primary", [parameter(Mandatory = $false,ParameterSetName = "AttendeeEmails")] [String[]] $AttendeeEmails, [parameter(Mandatory = $false,ParameterSetName = "AttendeeObjects")] [Google.Apis.Calendar.v3.Data.EventAttendee[]] $Attendees, [parameter(Mandatory = $false)] [String] $Location, [parameter(Mandatory = $false)] [ValidateSet("Periwinkle","Seafoam","Lavender","Coral","Goldenrod","Beige","Cyan","Grey","Blue","Green","Red")] [String] $EventColor, [parameter(Mandatory = $false)] [DateTime] $LocalStartDateTime = (Get-Date), [parameter(Mandatory = $false)] [DateTime] $LocalEndDateTime = (Get-Date).AddMinutes(30), [parameter(Mandatory = $false)] [String] $StartDate, [parameter(Mandatory = $false)] [String] $EndDate, [parameter(Mandatory = $false)] [String] $UTCStartDateTime, [parameter(Mandatory = $false)] [String] $UTCEndDateTime ) Begin { $colorHash = @{ Periwinkle = 1 Seafoam = 2 Lavender = 3 Coral = 4 Goldenrod = 5 Beige = 6 Cyan = 7 Grey = 8 Blue = 9 Green = 10 Red = 11 } } Process { try { foreach ($U in $User) { if ($U -ceq 'me') { $U = $Script:PSGSuite.AdminEmail } elseif ($U -notlike "*@*.*") { $U = "$($U)@$($Script:PSGSuite.Domain)" } $serviceParams = @{ Scope = 'https://www.googleapis.com/auth/calendar' ServiceType = 'Google.Apis.Calendar.v3.CalendarService' User = $U } $service = New-GoogleService @serviceParams if ($PSCmdlet.ParameterSetName -eq 'AttendeeEmails' -and $PSBoundParameters.Keys -contains 'AttendeeEmails') { [Google.Apis.Calendar.v3.Data.EventAttendee[]]$Attendees = $AttendeeEmails | ForEach-Object { Add-GSEventAttendee -Email $_ } } foreach ($calId in $CalendarID) { $body = New-Object 'Google.Apis.Calendar.v3.Data.Event' if ($Attendees) { $body.Attendees = [Google.Apis.Calendar.v3.Data.EventAttendee[]]$Attendees } foreach ($key in $PSBoundParameters.Keys) { switch ($key) { EventColor { $body.ColorId = $colorHash[$EventColor] } Default { if ($body.PSObject.Properties.Name -contains $key) { $body.$key = $PSBoundParameters[$key] } } } } $body.Start = if ($UTCStartDateTime) { New-Object 'Google.Apis.Calendar.v3.Data.EventDateTime' -Property @{ DateTime = $UTCStartDateTime } } elseif ($StartDate) { New-Object 'Google.Apis.Calendar.v3.Data.EventDateTime' -Property @{ Date = (Get-Date $StartDate -Format "yyyy-MM-dd") } } else { New-Object 'Google.Apis.Calendar.v3.Data.EventDateTime' -Property @{ DateTime = $LocalStartDateTime } } $body.End = if ($UTCEndDateTime) { New-Object 'Google.Apis.Calendar.v3.Data.EventDateTime' -Property @{ DateTime = $UTCEndDateTime } } elseif ($EndDate) { New-Object 'Google.Apis.Calendar.v3.Data.EventDateTime' -Property @{ Date = (Get-Date $EndDate -Format "yyyy-MM-dd") } } else { New-Object 'Google.Apis.Calendar.v3.Data.EventDateTime' -Property @{ DateTime = $LocalEndDateTime } } Write-Verbose "Creating Calendar Event '$($Summary)' on calendar '$calId' for user '$U'" $request = $service.Events.Insert($body,$calId) $request.Execute() | Add-Member -MemberType NoteProperty -Name 'User' -Value $U -PassThru | Add-Member -MemberType NoteProperty -Name 'CalendarId' -Value $calId -PassThru } } } catch { if ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } else { Write-Error $_ } } } } |