Esempio n. 1
0
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();

            PSBlobRestoreRange range = new PSBlobRestoreRange(this.StartRange, this.EndRange);

            WriteObject(range);
        }
Esempio n. 2
0
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();

            switch (ParameterSetName)
            {
            case AccountObjectParameterSet:
                this.ResourceGroupName  = StorageAccount.ResourceGroupName;
                this.StorageAccountName = StorageAccount.StorageAccountName;
                break;

            case AccountResourceIdParameterSet:
                ResourceIdentifier accountResource = new ResourceIdentifier(ResourceId);
                this.ResourceGroupName  = accountResource.ResourceGroupName;
                this.StorageAccountName = accountResource.ResourceName;
                break;

            default:
                // For AccountNameParameterSet, the ResourceGroupName and StorageAccountName can get from input directly
                break;
            }

            if (ShouldProcess(this.StorageAccountName, "Restore Blob Range"))
            {
                if (waitForComplete)
                {
                    Task <AzureOperationResponse <BlobRestoreStatus> > beginTask = this.StorageClient.StorageAccounts.BeginRestoreBlobRangesWithHttpMessagesAsync(
                        this.ResourceGroupName,
                        this.StorageAccountName,
                        this.TimeToRestore,
                        PSBlobRestoreRange.ParseBlobRestoreRanges(this.BlobRestoreRange));

                    beginTask.Wait();

                    AzureOperationResponse <BlobRestoreStatus> response = beginTask.Result;

                    WriteWarning(string.Format("Restore blob ranges with Id '{0}' started. Restore blob ranges time to complete is dependent on the size of the restore.", response.Body is null ? "" : response.Body.RestoreId));

                    Task <AzureOperationResponse <BlobRestoreStatus> > waitTask = ((StorageManagementClient)this.StorageClient).GetPostOrDeleteOperationResultAsync(response, null, new System.Threading.CancellationToken());
                    try
                    {
                        waitTask.Wait();
                    }
                    catch (System.AggregateException ex) when(ex.InnerException is CloudException)
                    {
                        throw new InvalidJobStateException(string.Format("Blob ranges restore failed with information: '{0}'.", ((CloudException)ex.InnerException).Response.Content));
                    }

                    AzureOperationResponse <BlobRestoreStatus> result = waitTask.Result;

                    WriteObject(new PSBlobRestoreStatus(result.Body));
                }
                else
                {
                    BlobRestoreStatus status = this.StorageClient.StorageAccounts.BeginRestoreBlobRanges(
                        this.ResourceGroupName,
                        this.StorageAccountName,
                        this.TimeToRestore,
                        PSBlobRestoreRange.ParseBlobRestoreRanges(this.BlobRestoreRange));

                    WriteObject(new PSBlobRestoreStatus(status));
                    if (status != null && status.Status == BlobRestoreProgressStatus.Failed)
                    {
                        throw new InvalidJobStateException("Blob ranges restore failed.");
                    }
                }
            }
        }