public override void ExecuteCmdlet()
        {
            var options = new WebJobFilterOptions() { Name = Name, Slot = Slot, JobName = JobName, JobType = JobType };
            List<IPSWebJob> jobs = WebsitesClient.FilterWebJobs(options);

            WriteObject(jobs, true);
        }
        public override void ExecuteCmdlet()
        {
            WebJobFilterOptions options = new WebJobFilterOptions() { Name = Name, Slot = Slot, JobName = JobName, JobType = JobType };
            List<PSWebJob> jobs = new List<PSWebJob>();
            try
            {
                jobs = WebsitesClient.FilterWebJobs(options);
            }
            catch
            {
                // Ignore exceptions, just show empty list.
            }

            WriteObject(jobs, true);
        }
        /// <summary>
        /// Filters the web jobs.
        /// </summary>
        /// <param name="options">The web job filter options</param>
        /// <returns>The filtered web jobs list</returns>
        public List<IPSWebJob> FilterWebJobs(WebJobFilterOptions options)
        {
            //GetWebsite(options.Name, options.Slot);

            options.Name = SetWebsiteName(options.Name, options.Slot);

            IWebSiteExtensionsClient client = GetWebSiteExtensionsClient(options.Name);
            List<WebJobBase> jobList = new List<WebJobBase>();
            bool isContinuousJobs = false;
            bool isTriggeredJobs = false;

            if (string.IsNullOrEmpty(options.JobType))
            {
                isContinuousJobs = true;
                isTriggeredJobs = true;
            }
            else
            {
                if (string.Compare(options.JobType, WebJobType.Continuous.ToString(), StringComparison.CurrentCultureIgnoreCase) == 0)
                {
                    isContinuousJobs = true;
                }
                else if (string.Compare(options.JobType, WebJobType.Triggered.ToString(), StringComparison.CurrentCultureIgnoreCase) == 0)
                {
                    isTriggeredJobs = true;
                }
                else
                {
                    throw new ArgumentOutOfRangeException("JobType");
                }
            }

            if (!string.IsNullOrEmpty(options.JobName))
            {
                if (isContinuousJobs && isTriggeredJobs)
                {
                    throw new ArgumentOutOfRangeException("JobType");
                }

                WebJobBase webJob =
                    isContinuousJobs
                        ? (WebJobBase)client.ContinuousWebJobs.Get(options.JobName).ContinuousWebJob
                        : (WebJobBase)client.TriggeredWebJobs.Get(options.JobName).TriggeredWebJob;

                if (webJob == null)
                {
                    throw new ArgumentOutOfRangeException("JobName");
                }

                jobList.Add(webJob);
            }
            else
            {
                if (isContinuousJobs)
                {
                    jobList.AddRange(client.ContinuousWebJobs.List().ContinuousWebJobs);
                }

                if (isTriggeredJobs)
                {
                    jobList.AddRange(client.TriggeredWebJobs.List().TriggeredWebJobs);
                }
            }

            return jobList.Select(webJob =>
                webJob is ContinuousWebJob ?
                    (IPSWebJob)new PSContinuousWebJob(webJob as ContinuousWebJob) :
                    (IPSWebJob)new PSTriggeredWebJob(webJob as TriggeredWebJob)).ToList();
        }
        /// <summary>
        /// Creates new web job for a website
        /// </summary>
        /// <param name="name">The website name</param>
        /// <param name="slot">The website slot name</param>
        /// <param name="jobName">The web job name</param>
        /// <param name="jobType">The web job type</param>
        /// <param name="jobFile">The web job file name</param>
        /// <returns>The created web job instance</returns>
        public IPSWebJob CreateWebJob(string name, string slot, string jobName, WebJobType jobType, string jobFile)
        {
            name = SetWebsiteName(name, slot);
            IWebSiteExtensionsClient client = GetWebSiteExtensionsClient(name);

            string fileName = Path.GetFileName(jobFile);
            bool isZipFile = Path.GetExtension(jobFile).ToLower() == ".zip";

            switch (jobType)
            {
                case WebJobType.Continuous:
                    if (isZipFile)
                    {
                        client.ContinuousWebJobs.UploadZip(jobName, fileName, File.OpenRead(jobFile));
                    }
                    else
                    {
                        client.ContinuousWebJobs.UploadFile(jobName, fileName, File.OpenRead(jobFile));
                    }
                    break;

                case WebJobType.Triggered:
                    if (isZipFile)
                    {
                        client.TriggeredWebJobs.UploadZip(jobName, fileName, File.OpenRead(jobFile));
                    }
                    else
                    {
                        client.TriggeredWebJobs.UploadFile(jobName, fileName, File.OpenRead(jobFile));
                    }
                    break;

                default:
                    break;
            }

            //Thread.Sleep(UploadJobWaitTime);

            var options = new WebJobFilterOptions() { Name = name, Slot = slot, JobName = jobName, JobType = jobType.ToString() };

            try
            {
                return FilterWebJobs(options).FirstOrDefault();
            }
            catch (CloudException e)
            {
                if (e.Response.StatusCode == HttpStatusCode.NotFound)
                {
                    throw new ArgumentException(Resources.InvalidJobFile);
                }

                throw;
            }
        }
        /// <summary>
        /// Creates new web job for a website
        /// </summary>
        /// <param name="name">The website name</param>
        /// <param name="slot">The website slot name</param>
        /// <param name="jobName">The web job name</param>
        /// <param name="jobType">The web job type</param>
        /// <param name="jobFile">The web job file name</param>
        public PSWebJob CreateWebJob(string name, string slot, string jobName, WebJobType jobType, string jobFile)
        {
            WebJobFilterOptions options = new WebJobFilterOptions() { Name = name, Slot = slot, JobName = jobName, JobType = jobType.ToString() };
            name = SetWebsiteName(name, slot);
            IWebSiteExtensionsClient client = GetWebSiteExtensionsClient(name);

            if (Path.GetExtension(jobFile).ToLower() != ".zip")
            {
                throw new InvalidOperationException(Resources.InvalidWebJobFile);
            }

            switch (jobType)
            {
                case WebJobType.Continuous:
                    client.WebJobs.UploadContinuous(jobName, File.OpenRead(jobFile));
                    break;
                case WebJobType.Triggered:
                    client.WebJobs.UploadTriggered(jobName, File.OpenRead(jobFile));
                    break;
                default:
                    break;
            }
            PSWebJob webjob = null;

            Thread.Sleep(UploadJobWaitTime);

            try
            {
                webjob = FilterWebJobs(options).FirstOrDefault();
            }
            catch (CloudException e)
            {
                if (e.Response.StatusCode == HttpStatusCode.NotFound)
	            {
                    throw new ArgumentException(Resources.InvalidJobFile);
	            }
            }


            return webjob;
        }
        /// <summary>
        /// Filters the web jobs.
        /// </summary>
        /// <param name="options">The web job filter options</param>
        /// <returns>The filtered web jobs list</returns>
        public List<PSWebJob> FilterWebJobs(WebJobFilterOptions options)
        {
            options.Name = SetWebsiteName(options.Name, options.Slot);
            IWebSiteExtensionsClient client = GetWebSiteExtensionsClient(options.Name);
            List<WebJob> jobList = new List<WebJob>();

            if (string.IsNullOrEmpty(options.JobName) && string.IsNullOrEmpty(options.JobType))
            {
                jobList = client.WebJobs.List(new WebJobListParameters()).Jobs.ToList();
            }
            else if (string.IsNullOrEmpty(options.JobName) && !string.IsNullOrEmpty(options.JobType))
            {
                if (string.Compare(options.JobType, WebJobType.Continuous.ToString(), true) == 0)
                {
                    jobList = client.WebJobs.ListContinuous(new WebJobListParameters()).Jobs.ToList();
                }
                else if (string.Compare(options.JobType, WebJobType.Triggered.ToString(), true) == 0)
                {
                    jobList = client.WebJobs.ListTriggered(new WebJobListParameters()).Jobs.ToList();
                }
                else
                {
                    throw new ArgumentOutOfRangeException("JobType");
                }
            }
            else if (!string.IsNullOrEmpty(options.JobName) && !string.IsNullOrEmpty(options.JobType))
            {
                if (string.Compare(options.JobType, WebJobType.Continuous.ToString(), true) == 0)
                {
                    jobList = new List<WebJob>() { client.WebJobs.GetContinuous(options.JobName).WebJob };
                }
                else if (string.Compare(options.JobType, WebJobType.Triggered.ToString(), true) == 0)
                {
                    jobList = new List<WebJob>() { client.WebJobs.GetTriggered(options.JobName).WebJob };
                }
                else
                {
                    throw new ArgumentOutOfRangeException("JobType");
                }
            }
            else
            {
                if (string.IsNullOrEmpty(options.JobName))
                {
                    throw new ArgumentOutOfRangeException("JobName");
                }
                else if (string.IsNullOrEmpty(options.JobType))
                {
                    throw new ArgumentOutOfRangeException("JobType");
                }
                else
                {
                    throw new ArgumentOutOfRangeException("options");
                }
            }

            List<PSWebJob> result = new List<PSWebJob>();
            foreach(WebJob job in jobList)
            {
                result.Add(new PSWebJob(job));
            }
            return result;
        }