public override void ExecuteCmdlet() { if (!string.IsNullOrWhiteSpace(ResourceGroupName) && !string.IsNullOrWhiteSpace(WebAppName)) { string certName = null; HttpStatusCode statusCode = HttpStatusCode.OK; var webApp = new PSSite(WebsitesClient.GetWebApp(ResourceGroupName, WebAppName, Slot)); var location = webApp.Location; var certificate = new Certificate( webApp.Location, type: "Microsoft.Web/certificates", canonicalName: HostName, password: "", serverFarmId: webApp.ServerFarmId); PSCertificate createdCertdetails = new PSCertificate(certificate); if (this.ShouldProcess(this.WebAppName, string.Format($"Creating an App service managed certificate for Web App '{WebAppName}'"))) { try { //Default certName is HostName certName = Name != null ? Name : HostName; createdCertdetails = new PSCertificate(WebsitesClient.CreateCertificate(ResourceGroupName, certName, certificate)); } catch (DefaultErrorResponseException e) { statusCode = e.Response.StatusCode; // 'Conflict' exception is thrown when certificate already exists. Let's swallow it and continue. //'Accepted' exception is thrown by default for create cert method. if (e.Response.StatusCode != HttpStatusCode.Conflict && e.Response.StatusCode != HttpStatusCode.Accepted) { throw; } if (e.Response.StatusCode == HttpStatusCode.Accepted) { var poll_url = e.Response.Headers["Location"].FirstOrDefault(); var token = WebsitesClient.GetAccessToken(DefaultContext); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token.AccessToken); HttpResponseMessage r; int numChecks = 0; do { Thread.Sleep(TimeSpan.FromSeconds(5)); r = client.GetAsync(poll_url).Result; numChecks++; } while (r.StatusCode == HttpStatusCode.Accepted && numChecks < NumStatusChecks); if (r.StatusCode == HttpStatusCode.Accepted && numChecks >= NumStatusChecks) { var rec = new ErrorRecord(new Exception(string.Format($"The creation of the managed certificate '{this.HostName}' is taking longer than expected." + $" Please re-try the operation '{CreateInputCommand()}'")), string.Empty, ErrorCategory.OperationTimeout, null); WriteError(rec); } } } createdCertdetails = new PSCertificate(WebsitesClient.GetCertificate(ResourceGroupName, certName)); //Add only when user is opted for Binding if (AddBinding) { WebsitesClient.UpdateHostNameSslState(ResourceGroupName, WebAppName, Slot, webApp.Location, HostName, SslState.HasValue ? SslState.Value : Management.WebSites.Models.SslState.SniEnabled, createdCertdetails.Thumbprint); } WriteObject(createdCertdetails); } } }