internal async Task <SharedAccessBlobPolicies> GetPoliciesAsync(IStorageBlobManagement localChannel, string containerName, string policyName)
        {
            CloudBlobContainer       container = localChannel.GetContainerReference(containerName);
            BlobContainerPermissions blobContainerPermissions = await localChannel.GetContainerPermissionsAsync(container, null, null, null, CmdletCancellationToken).ConfigureAwait(false);

            return(blobContainerPermissions.SharedAccessPolicies);
        }
        /// <summary>
        /// Async get container permission
        /// </summary>
        /// <param name="container">CloudBlobContainer object</param>
        /// <param name="taskId">Task id</param>
        /// <param name="context">Azure storage context</param>
        /// <returns></returns>
        internal async Task GetContainerPermission(long taskId, IStorageBlobManagement localChannel, CloudBlobContainer container, BlobContinuationToken continuationToken)
        {
            BlobRequestOptions       requestOptions  = RequestOptions;
            AccessCondition          accessCondition = null;
            BlobContainerPermissions permissions     = null;

            try
            {
                permissions = await localChannel.GetContainerPermissionsAsync(container, accessCondition,
                                                                              requestOptions, OperationContext, CmdletCancellationToken).ConfigureAwait(false);
            }
            catch (StorageException e) when(e.IsNotFoundException() || e.IsForbiddenException())
            {
                // 404 Not found, or 403 Forbidden means we don't have permission to query the Permission of the specified container.
                // Just skip return container permission in this case.
            }
            WriteCloudContainerObject(taskId, localChannel, container, permissions, continuationToken);
        }
        /// <summary>
        /// Async get container permission
        /// </summary>
        /// <param name="container">CloudBlobContainer object</param>
        /// <param name="taskId">Task id</param>
        /// <param name="context">Azure storage context</param>
        /// <returns></returns>
        internal async Task GetContainerPermission(long taskId, IStorageBlobManagement localChannel, CloudBlobContainer container, BlobContinuationToken continuationToken)
        {
            BlobRequestOptions       requestOptions  = RequestOptions;
            AccessCondition          accessCondition = null;
            BlobContainerPermissions permissions     = null;

            try
            {
                permissions = await localChannel.GetContainerPermissionsAsync(container, accessCondition,
                                                                              requestOptions, OperationContext, CmdletCancellationToken);
            }
            catch (StorageException e)
            {
                if (!e.IsNotFoundException())
                {
                    throw;
                }
                //404 Not found means we don't have permission to query the Permission of the specified container.
            }
            WriteCloudContainerObject(taskId, localChannel, container, permissions, continuationToken);
        }
        /// <summary>
        /// Async get container permission
        /// </summary>
        /// <param name="container">CloudBlobContainer object</param>
        /// <param name="taskId">Task id</param>
        /// <param name="context">Azure storage context</param>
        /// <returns></returns>
        internal async Task GetContainerPermission(long taskId, IStorageBlobManagement localChannel, CloudBlobContainer container, BlobContinuationToken continuationToken)
        {
            BlobRequestOptions       requestOptions  = RequestOptions;
            AccessCondition          accessCondition = null;
            BlobContainerPermissions permissions     = null;
            bool needUseTrack2 = false;

            try
            {
                permissions = await localChannel.GetContainerPermissionsAsync(container, accessCondition,
                                                                              requestOptions, OperationContext, CmdletCancellationToken).ConfigureAwait(false);
            }
            catch (StorageException e) when(e.IsNotFoundException() || e.IsForbiddenException())
            {
                // 404 Not found, or 403 Forbidden means we don't have permission to query the Permission of the specified container.
                // Just skip return container permission in this case.
            }
            catch (StorageException e) when(e.IsConflictException())
            {
                // 409 Conflict, might caused by the container has an Stored access policy contains a permission that is not supported by Track1 SDK API veresion, so switch to Track2 SDK
                needUseTrack2 = true;
            }

            if (!needUseTrack2) // Track1
            {
                WriteCloudContainerObject(taskId, localChannel, container, permissions, continuationToken);
            }
            else //Track2
            {
                AzureStorageContainer azureContainer = new AzureStorageContainer(container, null);
                azureContainer.Context           = localChannel.StorageContext;
                azureContainer.ContinuationToken = continuationToken;
                azureContainer.SetTrack2Permission();
                OutputStream.WriteObject(taskId, azureContainer);
            }
        }
 /// <summary>
 /// Async get container permission
 /// </summary>
 /// <param name="container">CloudBlobContainer object</param>
 /// <param name="taskId">Task id</param>
 /// <param name="context">Azure storage context</param>
 /// <returns></returns>
 internal async Task GetContainerPermission(long taskId, IStorageBlobManagement localChannel, CloudBlobContainer container, BlobContinuationToken continuationToken)
 {
     BlobRequestOptions requestOptions = RequestOptions;
     AccessCondition accessCondition = null;
     BlobContainerPermissions permissions = null;
     try
     {
         permissions = await localChannel.GetContainerPermissionsAsync(container, accessCondition,
             requestOptions, OperationContext, CmdletCancellationToken);
     }
     catch (StorageException e)
     {
         if (!e.IsNotFoundException())
         {
             throw;
         }
         //404 Not found means we don't have permission to query the Permission of the specified container.
     }
     WriteCloudContainerObject(taskId, localChannel, container, permissions, continuationToken);
 }
 internal async Task<SharedAccessBlobPolicies> GetPoliciesAsync(IStorageBlobManagement localChannel, string containerName, string policyName)
 {
     CloudBlobContainer container = localChannel.GetContainerReference(containerName);
     BlobContainerPermissions blobContainerPermissions = await localChannel.GetContainerPermissionsAsync(container, null, null, null, CmdletCancellationToken);
     return blobContainerPermissions.SharedAccessPolicies;
 }