public override void ExecuteCmdlet() { ListCertificateOptions options = new ListCertificateOptions(this.BatchContext, this.AdditionalBehaviors) { ThumbprintAlgorithm = this.ThumbprintAlgorithm, Thumbprint = this.Thumbprint, Filter = this.Filter, Select = this.Select, MaxCount = this.MaxCount }; // The enumerator will internally query the service in chunks. Using WriteObject with the enumerate flag will enumerate // the entire collection first and then write the items out one by one in a single group. Using foreach, we can take // advantage of the enumerator's behavior and write output to the pipeline in bursts. foreach (PSCertificate certificate in BatchClient.ListCertificates(options)) { WriteObject(certificate); } }
/// <summary> /// Lists the certificates matching the specified filter options. /// </summary> /// <param name="options">The options to use when querying for certificates.</param> /// <returns>The certificates matching the specified filter options.</returns> public IEnumerable <PSCertificate> ListCertificates(ListCertificateOptions options) { if (options == null) { throw new ArgumentNullException("options"); } // Get the single certificate matching the specified thumbprint if (!string.IsNullOrWhiteSpace(options.Thumbprint)) { WriteVerbose(string.Format(Resources.GetCertificateByThumbprint, options.Thumbprint)); CertificateOperations certOperations = options.Context.BatchOMClient.CertificateOperations; ODATADetailLevel getDetailLevel = new ODATADetailLevel(selectClause: options.Select); Certificate certificate = certOperations.GetCertificate(options.ThumbprintAlgorithm, options.Thumbprint, detailLevel: getDetailLevel, additionalBehaviors: options.AdditionalBehaviors); PSCertificate psCertificate = new PSCertificate(certificate); return(new PSCertificate[] { psCertificate }); } // List certificates using the specified filter else { string verboseLogString = null; ODATADetailLevel listDetailLevel = new ODATADetailLevel(selectClause: options.Select); if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = Resources.GetCertificatesByFilter; listDetailLevel.FilterClause = options.Filter; } else { verboseLogString = Resources.GetCertificatesNoFilter; } WriteVerbose(verboseLogString); CertificateOperations certOperations = options.Context.BatchOMClient.CertificateOperations; IPagedEnumerable <Certificate> certificates = certOperations.ListCertificates(listDetailLevel, options.AdditionalBehaviors); Func <Certificate, PSCertificate> mappingFunction = c => { return(new PSCertificate(c)); }; return(PSPagedEnumerable <PSCertificate, Certificate> .CreateWithMaxCount( certificates, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount)))); } }
/// <summary> /// Lists the certificates matching the specified filter options. /// </summary> /// <param name="options">The options to use when querying for certificates.</param> /// <returns>The certificates matching the specified filter options.</returns> public IEnumerable<PSCertificate> ListCertificates(ListCertificateOptions options) { if (options == null) { throw new ArgumentNullException("options"); } // Get the single certificate matching the specified thumbprint if (!string.IsNullOrWhiteSpace(options.Thumbprint)) { WriteVerbose(string.Format(Resources.GetCertificateByThumbprint, options.Thumbprint)); CertificateOperations certOperations = options.Context.BatchOMClient.CertificateOperations; ODATADetailLevel getDetailLevel = new ODATADetailLevel(selectClause: options.Select); Certificate certificate = certOperations.GetCertificate(options.ThumbprintAlgorithm, options.Thumbprint, detailLevel: getDetailLevel, additionalBehaviors: options.AdditionalBehaviors); PSCertificate psCertificate = new PSCertificate(certificate); return new PSCertificate[] { psCertificate }; } // List certificates using the specified filter else { string verboseLogString = null; ODATADetailLevel listDetailLevel = new ODATADetailLevel(selectClause: options.Select); if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = Resources.GetCertificatesByFilter; listDetailLevel.FilterClause = options.Filter; } else { verboseLogString = Resources.GetCertificatesNoFilter; } WriteVerbose(verboseLogString); CertificateOperations certOperations = options.Context.BatchOMClient.CertificateOperations; IPagedEnumerable<Certificate> certificates = certOperations.ListCertificates(listDetailLevel, options.AdditionalBehaviors); Func<Certificate, PSCertificate> mappingFunction = c => { return new PSCertificate(c); }; return PSPagedEnumerable<PSCertificate, Certificate>.CreateWithMaxCount( certificates, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount))); } }
/// <summary> /// Adds a test certificate for use in Scenario tests. Returns the thumbprint of the cert. /// </summary> public static string AddTestCertificate(BatchController controller, BatchAccountContext context, string filePath) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); X509Certificate2 cert = new X509Certificate2(filePath); ListCertificateOptions getParameters = new ListCertificateOptions(context) { ThumbprintAlgorithm = BatchTestHelpers.TestCertificateAlgorithm, Thumbprint = cert.Thumbprint, Select = "thumbprint,state" }; try { PSCertificate existingCert = client.ListCertificates(getParameters).FirstOrDefault(); DateTime start = DateTime.Now; DateTime end = start.AddMinutes(5); // Cert might still be deleting from other tests, so we wait for the delete to finish. while (existingCert != null && existingCert.State == CertificateState.Deleting) { if (DateTime.Now > end) { throw new TimeoutException("Timed out waiting for existing cert to be deleted."); } Sleep(5000); existingCert = client.ListCertificates(getParameters).FirstOrDefault(); } } catch (AggregateException ex) { foreach (Exception inner in ex.InnerExceptions) { BatchException batchEx = inner as BatchException; // When the cert doesn't exist, we get a 404 error. For all other errors, throw. if (batchEx == null || !batchEx.Message.Contains("CertificateNotFound")) { throw; } } } NewCertificateParameters parameters = new NewCertificateParameters(context, null, cert.RawData); client.AddCertificate(parameters); return cert.Thumbprint; }
/// <summary> /// Deletes a certificate. /// </summary> public static void WaitForCertificateToFailDeletion(BatchController controller, BatchAccountContext context, string thumbprintAlgorithm, string thumbprint) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListCertificateOptions parameters = new ListCertificateOptions(context) { ThumbprintAlgorithm = BatchTestHelpers.TestCertificateAlgorithm, Thumbprint = thumbprint }; PSCertificate cert = client.ListCertificates(parameters).First(); DateTime timeout = DateTime.Now.AddMinutes(2); while (cert.State != CertificateState.DeleteFailed) { if (DateTime.Now > timeout) { throw new TimeoutException("Timed out waiting for failed certificate deletion"); } Sleep(10000); cert = client.ListCertificates(parameters).First(); } }