Public/New-CitrixScheduledTasks.ps1
<#
.SYNOPSIS Ensures Citrix report folder structure exists and creates scheduled tasks under "Citrix Licensing". .DESCRIPTION The `New-CitrixScheduledTasks` function: - Creates the folder structure at `C:\Reports` if missing. - Creates a folder in Task Scheduler called "Citrix Licensing". - Adds three scheduled tasks to this folder: 1. **Report 1** – Runs every minute. 2. **Report 2** – Runs daily at 12:05 AM (Monday to Friday). 3. **Report 3** – Runs on the first Monday of each month at 1 AM. - Uses the **current user account** to run these tasks. .PARAMETER AdminAddress The Citrix Server Admin Address. .PARAMETER Recipients The email recipients for the reports. .PARAMETER SmtpServer The SMTP server for sending reports. #> Function New-CitrixScheduledTasks { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$AdminAddress, [Parameter(Mandatory = $true)] [string]$Recipients, [Parameter(Mandatory = $true)] [string]$SmtpServer ) try { $ReportFolder = Read-Host "Enter the folder location (Press Enter for default 'C:\Reports')" if ([string]::IsNullOrWhiteSpace($ReportFolder)) { $ReportFolder = "C:\Reports" Create-CitrixReportFolders -Location $ReportFolder Write-Host "No input detected. Using default location: $ReportFolder" -ForegroundColor Yellow } else { Write-Host "You entered: $ReportFolder" -ForegroundColor Green } if (-not (Test-Path -Path $ReportFolder)) { Write-Host "Folder does not exist. Creating: $ReportFolder" -ForegroundColor Cyan New-Item -Path $ReportFolder -ItemType Directory -Force | Out-Null Create-CitrixReportFolders -Location $ReportFolder } $CurrentUser = "$env:USERDOMAIN\$env:USERNAME" $TaskFolder = "Citrix Licensing" $scheduleObject = New-Object -ComObject schedule.service $scheduleObject.Connect() $rootFolder = $scheduleObject.GetFolder("\") $existingFolders = $rootFolder.GetFolders(0) | Select-Object -ExpandProperty Name if ($existingFolders -notcontains $TaskFolder) { $rootFolder.CreateFolder($TaskFolder) | Out-Null } $Action1 = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -WindowStyle Hidden -Command `"Get-CitrixLicenseReport -AdminAddress '$AdminAddress' -Csv -Folder '$ReportFolder'`"" $Trigger1 = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(1) -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration (New-TimeSpan -Days 1) Register-ScheduledTask -TaskName "Citrix_License_Report_Every_Minute" -TaskPath "\Citrix Licensing" -Action $Action1 -Trigger $Trigger1 -User $CurrentUser -RunLevel Highest -Force $Action2 = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -WindowStyle Hidden -Command `"Invoke-CitrixReportProcessing -Recipients '$Recipients' -InputFolder '$ReportFolder\Daily\csv' -OutputFolder '$ReportFolder\Daily\Excel' -SmtpServer '$SmtpServer' -ReportType Daily`"" $Trigger2 = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -At "12:05AM" Register-ScheduledTask -TaskName "Citrix_Daily_Report" -TaskPath "\Citrix Licensing" -Action $Action2 -Trigger $Trigger2 -User $CurrentUser -RunLevel Highest -Force $Action3 = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -WindowStyle Hidden -Command `"Invoke-CitrixReportProcessing -Recipients '$Recipients' -InputFolder '$ReportFolder\Daily\Excel' -OutputFolder '$ReportFolder\Monthly' -SmtpServer '$SmtpServer' -ReportType Monthly`"" $Trigger3 = New-ScheduledTaskTrigger -Weekly -WeeksInterval 5 -DaysOfWeek Monday -At "1:00AM" $Trigger3.Id = "FirstMondayTrigger" Register-ScheduledTask -TaskName "Citrix_Monthly_Report" -TaskPath "\Citrix Licensing" -Action $Action3 -Trigger $Trigger3 -User $CurrentUser -RunLevel Highest -Force } catch { Write-Host "[ERROR] Failed to create scheduled tasks: $($_.Exception.Message)" -ForegroundColor Red } } |