1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
Remove-Variable * -ErrorAction SilentlyContinue; Remove-Module *; $error.Clear(); Clear-Host #This will Break the Webcall scripts #https://stackoverflow.com/questions/47542628/cannot-convert-argument-second-time-in-powershell #https://www.slipstick.com/developer/change-programmatic-access-options/ #$proxy = New-WebServiceProxy -uri "http://localhost:8080/API.asmx?WSDL" -namespace "com.api" -class "MyProxyClass" #$proxy = New-WebServiceProxy -uri "http://localhost:8080/API.asmx?WSDL" -namespace "MyPortal" -class "MyProxyClass" # load the required .NET types Add-Type -AssemblyName 'Microsoft.Office.Interop.Outlook' $GCalenderItems = $null #Makes global Car $End = (Get-Date).AddDays(14).ToShortDateString() $Start = (Get-Date).AddDays(-14).ToShortDateString() Function Get-OutlookCalendar { # access Outlook object model $outlook = New-Object -ComObject outlook.application # connect to the appropriate location $namespace = $outlook.GetNameSpace('MAPI') $Calendar = [Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderCalendar $Filter = "[MessageClass]='IPM.Appointment' and [IsRecurring] = '$False' AND [Start] > '$Start' AND [Start] < '$End'" # AND [End] < '$End'" #AND [Start] > '$Start' AND [End] < '$End'" $CalenderItems = $namespace.getDefaultFolder($Calendar).Items.Restrict($Filter) $CalenderItems | Select-Object -Property Start, Subject write-host "There are $($CalenderItems.Count) calendar entries. Fetching between $($start) and $($end)" #write-host "There are $($CalenderItems.Items.Count) calendar entries. Fetching between $($start) and $($end)" #$folder #$CalenderItems | Select-Object -Property Start, End, Categories, Subject, IsRecurring, Organizer #$folder | gm return $CalenderItems #$dataToReturn = $folder.Items.Restrict($Filter) # | Select-Object -Property Start, End, Categories, Subject, IsRecurring, Organizer $folder.items | Select-Object -Property Start, Categories, Subject, IsRecurring, Organizer $data = $folder.items | Select-Object -Property Start, Categories, Subject, IsRecurring, Organizer $data | Where-Object ($_.Subject -ne "!@#!#!$") $cal = $data | Where-Object ($_Subject -CContains "paceart") write-host "Completed" } $GCalenderItems = Get-OutlookCalendar function add-appointment(){ <# .SYNOPSIS Creates and appointment in outlook .DESCRIPTION Creates an appointment in outlook in the default calendar folder .PARAMETER TimeDate Time and Date of the appointment. Multiple formats are accepted. Please use the one common to your region. It will create the appointment for today if no date is specified. .PARAMETER Location The message to be send. .PARAMETER ReminderMinutesBeforeStart Sets when to send reminder for appointment. Default is 15 minutes. 1440 minutes are in a day and 10080 minutes in a week. Set it to 0 for no reminders. .PARAMETER Subject The subject of the appointment. .EXAMPLE add-appointment -TimeDate "1/4/2015 4:30 pm" -Subject "Little Mermaid" -location "Cameo Theater" -ReminderMinutesBeforeStart 0 This example adds a appointment on 1/4/2015 at 4:30 PM with subject Little mermaid and no reminder. .NOTES Requires Windows PowerShell v2 or later and Microsoft Office Outlook 2010 or later. Outlook cannot be running when running this script.Some versions of Outlook will not close the session. Please go to taskbar and close manually in that case. #> [CmdletBinding()] param ( [parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] $TimeDate, [parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] $Subject , $location, [int]$ReminderMinutesBeforeStart = "15" ) $AppointmentTime = get-date $Timedate #Check whether Outlook is installed if (-not (Test-Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\App Paths\OUTLOOK.EXE")) { Write-Warning "Outlook is not installed. You need to install Outlook 2010 or later to use this Script." break } #Check if Outlook is running. $OutlookState = Get-Process | Where-Object {$_.Name -eq "outlook"} if ($OutlookState) { Write-Warning "Outlook is running. Please close outlook to run this script" break } $outlook = new-object -com Outlook.Application $calendar = $outlook.Session.GetDefaultFolder(9) # == olFolderCalendar $appt = $calendar.Items.Add(1) # == olAppointmentItem $appt.Start = [datetime]$AppointmentTime $appt.Subject = $subject $appt.Location = $location $appt.ReminderSet = $true $appt.ReminderMinutesBeforeStart =$ReminderMinutesBeforeStart $appt.Save() $outlook.Quit() } if ( !(Test-Path variable:proxy) ) { $proxy = New-WebServiceProxy -uri "https://MyPortal/API.asmx?WSDL" -namespace "MyPortal" -UseDefaultCredential #$proxy = New-WebServiceProxy -uri "http://localhost:8080/API.asmx" -namespace "MyPortal" -UseDefaultCredential } function AdvanceSearch-appointment(){ $Outlook = New-Object -ComObject Outlook.Application Unregister-Event * Register-ObjectEvent -InputObject $Outlook -EventName "AdvancedSearchComplete" -Action { Write-Host "ADVANCED SEARCH COMPLETE" $Args.Scope "Results: " $Args.Results if ($Args.Results) { foreach ($result in $Args.Results) { write-host "==================================================" write-host $result.Subject write-host $result.ReceivedTime write-host $result.SenderName write-host "==================================================" } } } #$olFolders = “Microsoft.Office.Interop.Outlook.OlDefaultFolders” -as [type] $olFolders = [Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderCalendar $NameSpace = $Outlook.GetNameSpace(“MAPI”) #$Scope = $NameSpace.getDefaultFolder($olFolders::olFolderCalendar) #'Inbox' $Scope = 'Inbox' #$NameSpace.getDefaultFolder($olFolders) #'Inbox' #'Calendar' $Emails = $Outlook.AdvancedSearch( $Scope, "", $true ) #urn:schemas:calendar:subject != '%' #$Emails } $person = New-Object "MyPortal.ThePerson"; $person.FirstName = "Frederick"; $person.LastName = "DebYouSee"; $Command = New-Object "MyPortal.SystemChange"; $Command = $proxy.Jira_QueryAllOpenChangeControlsThisWeek(50); $ol = New-Object -ComObject Outlook.Application; $meeting = $ol.CreateItem('olAppointmentItem'); $calendar = $ol.Session.GetDefaultFolder(9) # == olFolderCalendar :nextCalendarItem foreach($file in $Command) { [string]$MyTitle = " CC" + $file.Ticket + ": " + $file.summary; Write-Host $MyTitle; #$file.Ticket.ToString().Trim() ": " $file.summary.ToString().Trim(); #$GCalenderItems | Select-Object -Property Start, Subject foreach ($result in $GCalenderItems) { if ($result.Subject -like $MyTitle) { write-host "==================================================" write-host $result.Start write-host $result.End write-host $result.Subject write-host "==================================================" continue nextCalendarItem; } } Write-Host $file.PlannedStartDate; Write-Host $file.PlannedEndDate; $meeting.Subject = "$MyTitle"; $meeting.Body = $file.description; $meeting.Categories = "ChangeControlReminder"; $meeting.Location = 'Change Control Reminder'; $meeting.ReminderSet = $true; $meeting.Importance = 1; $meeting.MeetingStatus = [Microsoft.Office.Interop.Outlook.OlMeetingStatus]::olMeeting #$meeting.Recipients.Add('mjones@contoso.net') $meeting.ReminderMinutesBeforeStart = 15 $StartDate = [DateTime]::Parse($file.PlannedStartDate, [System.Globalization.CultureInfo]::InvariantCulture); #$file.PlannedStartDate#DateTime.Parse() #System.Globalization.CultureInfo.InvariantCulture $EndDate = [DateTime]::Parse($file.PlannedEndDate, [System.Globalization.CultureInfo]::InvariantCulture); #$file.PlannedStartDate#DateTime.Parse() #System.Globalization.CultureInfo.InvariantCulture $duration = $EndDate - $StartDate $meeting.Start = $StartDate if ($duration.TotalHours -gt 8) { $meeting.Duration = 30 } else { $meeting.Duration = $duration.TotalMinutes } #$meeting.Send() $appt = $calendar.Items.Add(1) # == olAppointmentItem $appt.Start = $StartDate; if ($duration.TotalHours -gt 8) { $appt.Duration = 30 } else { $appt.Duration = $duration.TotalMinutes } $appt.Subject = "$MyTitle"; $appt.Body = $file.description; $appt.Location = $location; $appt.Categories = "ChangeControlReminder"; $appt.Location = 'Change Control Reminder'; $appt | gm $appt.ReminderSet = $false; $appt.Importance = 1; $appt.BusyStatus = [Microsoft.Office.Interop.Outlook.OlBusyStatus]::olFree; $appt.ReminderMinutesBeforeStart = $ReminderMinutesBeforeStart; $appt.Save(); } #Invoke-Expression $Command; #$proxy.Dispose(); #You must dispose of the proxy IN YOUR SCRIPT, powershell will not do it for you! |