####################################################### # Holidayset editor v 1.1 # It should be run on Lync 2013 and Windows 2012 server # Written by : Atle Vatland # http://www.vatland.no # 15th January 2014. # Use at own risk. I'am not responsible for your usage. ####################################################### [CmdletBinding()] Param( [Parameter(Mandatory=$False)] [switch]$GUI = $true ) # if not running on Lync 2013 and Wndows 2012 uncomment lines below and enter correct LyncpoolFQDN #$Lyncpool="LyncPoolFQDN" #$cred = Get-Credential #if($cred -ne $null){ #$sessionOption = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck #$ConnectionURI="Https://" + $Lyncpool +"/OcsPowershell" #$session = New-PSSession -ConnectionURI $ConnectionURI -Credential $cred -SessionOption $sessionOption #Import-PsSession $session #} $entry=New-Object System.Collections.ArrayList # Dynamic Array to contain daylist $ApplicationServer=get-csService -ApplicationServer Write-Host "Will use :" $ApplicationServer function HolidaySetSelected{ $HSet=get-csrgsholidayset -name $objHSList.SelectedItem.ToString() $objHDList.Items.Clear(); $objCalendarFrom.Value=get-date $objCalendarTo.Value=get-date $entry.Clear() ForEach($HD in $HSet.HolidayList){ $objHDList.Items.Add($HD.Name) $entry.add($HD.Name) $entry.add($HD.StartDate) $entry.add($HD.EndDate) } } function HolidayListSelected{ $index=$objHDList.SelectedIndex if($index -ne -1){ # Anything selected? $NewHDTextBox.Text=$entry[($index*3)+0] $objcalendarfrom.value=$entry[($index*3)+1] $objcalendarto.value=$entry[($index*3)+2] } } function DeleteDayClicked{ $index=$objHDList.SelectedIndex if($index -ne -1){ # Anything selected? $objHDList.items.RemoveAt($index) $entry.Removeat($index*3+2) $entry.Removeat($index*3+1) $entry.Removeat($index*3+0) } } function NewDayClicked{ if($NewHDTextBox.Text -notlike $null){ $index=$objHDList.SelectedIndex $index2=$objHSList.SelectedIndex if($index2 -ne -1){ # Anything selected? $exist=$entry.indexof($NewHDTextBox.Text) if( $exist -eq -1){ $objHDList.Items.Add($NewHDTextBox.Text) $entry.add($NewHDTextBox.Text) $entry.add($objcalendarfrom.value) $entry.add($objcalendarto.value) } else{ [System.Windows.Forms.MessageBox]::Show("Holiday name already exists.","Error") } } } else{ [System.Windows.Forms.MessageBox]::Show("Holiday name cannot be empty.","Error") } } function UpdateDayClicked{ $index=$objHDList.SelectedIndex if($index -ne -1){ # Anything selected? $objHDList.Items[$index] = $NewHDTextBox.Text $entry[($index*3+0)]=$NewHDTextBox.Text $entry[($index*3+1)]=$objcalendarfrom.value $entry[($index*3+2)]=$objcalendarto.value } } function SaveDSClicked{ $hsi=$objHSList.SelectedIndex if($hsi -ne -1){ $h=Get-CsRgsHolidaySet -name $objHSList.SelectedItem.ToString() -ErrorAction SilentlyContinue -WarningAction SilentlyContinue if($h -ne $null){ #Update Existing HolidaySet $h.Holidaylist.Clear() $hdaycount=$objHDList.Items.Count for($counter=0;$counter -le $hdaycount-1;$counter++) { $start=$entry[($counter*3+1)] $end=$entry[($counter*3+2)] $day=new-csrgsholiday -Name $entry[($counter*3)+0] -StartDate $start -EndDate $end $h.HolidayList.Add($day) } ; Set-CsRgsHolidaySet -Instance $h [System.Windows.Forms.MessageBox]::Show("HolidaySet Updated.","Info") } else{ #Add New Holidayset # Holiday Set are new. # Create a new set with a temp day. $tempdato=get-date $day=new-csrgsholiday -Name temp -StartDate $tempdato.DateTime -EndDate $tempdato.DateTime $h=new-CsRgsHolidaySet -Name $objHSList.SelectedItem.ToString() -parent "service:$ApplicationServer" -HolidayList ($day) if($h -ne $null){ #Update Existing HolidaySet $h.Holidaylist.Clear() $hdaycount=$objHDList.Items.Count for($counter=0;$counter -le $hdaycount-1;$counter++) { $start=$entry[($counter*3+1)] $end=$entry[($counter*3+2)] $day=new-csrgsholiday -Name $entry[($counter*3)+0] -StartDate $start -EndDate $end $h.HolidayList.Add($day) } ; Set-CsRgsHolidaySet -Instance $h [System.Windows.Forms.MessageBox]::Show("HolidaySet Updated.","Info") } } } else { } } function NewHSClicked{ $objHSList.Items.Add($NewHSTextBox.Text) } function DeleteHSClicked{ $index2=$objHSList.SelectedIndex if($index2 -ne -1){ # Anything selected? $Yesno=[System.Windows.Forms.MessageBox]::Show("Do you want to delete this HolidaySet. Effective immediatly","Warning",1)# OK Cancel Messagebox if($Yesno -like "OK"){ $DStoRemove=get-csrgsholidayset -name $objHSList.SelectedItem.ToString() -ErrorAction SilentlyContinue -WarningAction SilentlyContinue Remove-CsRgsHolidaySet -Instance $DStoRemove -Force $objHSList.items.RemoveAt($index2) } } } function WhereUsedHSClicked{ $index2=$objHSList.SelectedIndex if($index2 -ne -1){ # Anything selected? $WFList.Items.Clear() $hs=Get-CsRgsHolidaySet -Name $objHSList.SelectedItem.ToString() $query="*" + $hs.identity +"*" $workflows=Get-CsRgsWorkflow | Where-Object -Property HolidaySetIDList -like $query ForEach($workflow in $workflows){ $WFList.Items.Add($workflow.Name) } } } [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [System.Windows.Forms.Application]::EnableVisualStyles() # Draw Form $objForm = New-Object System.Windows.Forms.Form $objForm.Text = "Data Entry Form" $objForm.Size = New-Object System.Drawing.Size(800,500) $objForm.StartPosition = "CenterScreen" $objForm.Text= "Lync 2013/2010 - Holiday set editor" # Holidayset list selector $objHSList = New-Object System.Windows.Forms.ListBox $objHSList.Location = New-Object System.Drawing.Point(30,30) $objHSList.Size = New-Object System.Drawing.Size(300,100) $objHSList.add_Click({HolidaySetSelected}); $HSListLabel = New-Object System.Windows.Forms.Label $HSListLabel.Location= "30,10" $HSListLabel.Size = "200,20" $HSListLabel.Text ="Holiday Set List." # Holidaylist list selector $objHDList = New-Object System.Windows.Forms.ListBox $objHDList.Location = New-Object System.Drawing.Point(400,30) $objHDList.Size = New-Object System.Drawing.Size(300,100) $objHDList.add_Click({HolidayListSelected}); $HDListLabel = New-Object System.Windows.Forms.Label $HDListLabel.Location= "400,10" $HDListLabel.Size = "200,20" $HDListLabel.Text ="Holiday Day's List." # From DateTime. $fromdateLabel = New-Object System.Windows.Forms.Label $fromdateLabel.Location= "400,230" $fromdateLabel.Size = "200,20" $fromdateLabel.Text ="Select start date-time...." $objCalendarFrom = New-Object System.Windows.Forms.DateTimePicker $objCalendarFrom.Format = [windows.forms.datetimepickerFormat]::custom $objCalendarFrom.CustomFormat = "dddd - dd MMMM yyyy HH:mm" $objCalendarFrom.Location = New-Object System.Drawing.Point(400,250) $objCalendarFrom.Size = New-Object System.Drawing.Size(300,50) # To DateTime. $todateLabel = New-Object System.Windows.Forms.Label $todateLabel.Location= "400,280" $todateLabel.Size = "200,20" $todateLabel.Text ="Select end date-time...." $objCalendarTo = New-Object System.Windows.Forms.DateTimePicker $objCalendarTo.Format = [windows.forms.datetimepickerFormat]::custom $objCalendarTo.CustomFormat = "dddd - dd MMMM yyyy HH:mm" $objCalendarTo.Location = New-Object System.Drawing.Point(400,300) $objCalendarTo.Size = New-Object System.Drawing.Size(300,50) # DeleteHoliday Button $DeletedayButton = New-Object System.Windows.Forms.Button $DeletedayButton.Location= "400,150" $DeletedayButton.Size = "100,20" $DeletedayButton.Text ="Delete Day" $DeletedayButton.add_Click({DeleteDayClicked}) # NewHoliday Name Textbox. $NewHDTextBox = New-Object System.Windows.Forms.TextBox $NewHDTextBox.Location="520,195" $NewHDTextBox.size="180,20" $SlashLabel = New-Object System.Windows.Forms.Label $SlashLabel.Location= "505,185" $SlashLabel.Size = "40,20" $SlashLabel.Text ="-\\" $BackslashLabel = New-Object System.Windows.Forms.Label $BackslashLabel.Location= "505,210" $BackslashLabel.Size = "40,20" $BackslashLabel.Text ="-//" # NewHoliday Button $newdayButton = New-Object System.Windows.Forms.Button $newdayButton.Location= "400,180" $newdayButton.Size = "100,20" $newdayButton.Text ="New Day" $newdayButton.add_Click({NewDayClicked}) # UpdateHoliday Button $updatedayButton = New-Object System.Windows.Forms.Button $updatedayButton.Location= "400,210" $updatedayButton.Size = "100,20" $updatedayButton.Text ="Update Day" $updatedayButton.add_Click({UpdateDayClicked}) # NewHolidaySet Textbox # DeleteHolidaySet Button $DeleteHSButton = New-Object System.Windows.Forms.Button $DeleteHSButton.Location= "30,150" $DeleteHSButton.Size = "100,20" $DeleteHSButton.Text ="Delete Set" $DeleteHSButton.add_Click({DeleteHSClicked}) # NewHolidaySet Name Textbox. $NewHSTextBox = New-Object System.Windows.Forms.TextBox $NewHSTextBox.Location="140,180" $NewHSTextBox.size="190,20" # NewHolidaySet Button $newHSButton = New-Object System.Windows.Forms.Button $newHSButton.Location= "30,180" $newHSButton.Size = "100,20" $newHSButton.Text ="New Set" $newHSButton.add_Click({NewHSClicked}) # SaveDaySet Button $SaveDButton = New-Object System.Windows.Forms.Button $SaveDButton.Location= "400,330" $SaveDButton.Size = "200,40" $SaveDButton.Text ="Save/Apply Days list" $SaveDButton.add_Click({SaveDSClicked}) # Where is HolidaySet used Button $WhereUsedHSButton = New-Object System.Windows.Forms.Button $WhereUsedHSButton.Location= "30,210" $WhereUsedHSButton.Size = "150,20" $WhereUsedHSButton.Text ="Workflow using this set" $WhereUsedHSButton.add_Click({WhereUsedHSClicked}) # Workflow used list $WFList = New-Object System.Windows.Forms.ListBox $WFList.Location = New-Object System.Drawing.Point(30,240) $WFList.Size = New-Object System.Drawing.Size(300,100) # Get existing holiday set $HSet=Get-CsRGSHolidaySet ForEach($Holiday in $HSet){ $objHSList.Items.Add($Holiday.Name) } # Add controls to form $objForm.Controls.Add($fromdateLabel) $objForm.Controls.Add($objCalendarFrom) $objForm.Controls.Add($todateLabel) $objForm.Controls.Add($objCalendarTo) $objForm.Controls.Add($objHSList) $objForm.Controls.Add($HSListLabel) $objForm.Controls.Add($objHDList) $objForm.Controls.Add($HDListLabel) $objForm.Controls.Add($updatedayButton) $objForm.Controls.Add($NewHDTextBox) $objForm.Controls.Add($newdayButton) $objForm.Controls.Add($deletedayButton) $objForm.Controls.Add($NewHSTextBox) $objForm.Controls.Add($newHSButton) $objForm.Controls.Add($deleteHSButton) $objForm.Controls.Add($SaveDButton) $objForm.Controls.Add($SlashLabel) $objForm.Controls.Add($BackSlashLabel) $objForm.Controls.Add($WhereUsedHSButton) $objForm.Controls.Add($WFList) $objForm.Topmost = $True $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog()