private void ListAllVMs()
        {
            var servicesList = this.ComputeClient.HostedServices.List();

            foreach (var service in servicesList.HostedServices)
            {
                try
                {
                    var deploymentGetResponse = this.ComputeClient.Deployments.GetBySlot(service.ServiceName, DeploymentSlot.Production);
                    foreach (var role in deploymentGetResponse.Roles)
                    {
                        if (role.RoleType == "PersistentVMRole")
                        {
                            RoleInstance instance  = deploymentGetResponse.RoleInstances.First(r => r.RoleName == role.RoleName);
                            var          vmContext = new PersistentVMRoleListContext
                            {
                                ServiceName = service.ServiceName,
                                Status      = instance.InstanceStatus,
                                Name        = instance.RoleName
                            };

                            WriteObject(vmContext, true);
                        }
                    }
                }
                catch (CloudException e)
                {
                    if (e.Response.StatusCode != HttpStatusCode.NotFound)
                    {
                        throw;
                    }
                }
            }
        }
        private T CreateVMContext <T>(string serviceName, NSM.Role vmRole, NSM.RoleInstance roleInstance, NSM.DeploymentGetResponse deployment)
            where T : PersistentVMRoleContext, new()
        {
            var vmContext = new T
            {
                ServiceName         = serviceName,
                DeploymentName      = deployment.Name,
                DNSName             = deployment.Uri.AbsoluteUri,
                Name                = vmRole.RoleName,
                AvailabilitySetName = vmRole.AvailabilitySetName,
                Label               = vmRole.Label,
                InstanceSize        = vmRole.RoleSize,
                InstanceStatus      = roleInstance == null ? string.Empty : roleInstance.InstanceStatus,
                IpAddress           = roleInstance == null ? string.Empty : roleInstance.IPAddress,
                PublicIPAddress     = roleInstance == null ? null
                                            : roleInstance.PublicIPs == null || !roleInstance.PublicIPs.Any() ? null
                                            : roleInstance.PublicIPs.First().Address,
                PublicIPName = roleInstance == null ? null
                                            : roleInstance.PublicIPs == null || !roleInstance.PublicIPs.Any() ? null
                                            : !string.IsNullOrEmpty(roleInstance.PublicIPs.First().Name) ? roleInstance.PublicIPs.First().Name
                                            : PersistentVMHelper.GetPublicIPName(vmRole),
                InstanceStateDetails = roleInstance == null ? string.Empty : roleInstance.InstanceStateDetails,
                PowerState           = roleInstance == null ? string.Empty : roleInstance.PowerState.ToString(),
                HostName             = roleInstance == null ? string.Empty : roleInstance.HostName,
                InstanceErrorCode    = roleInstance == null ? string.Empty : roleInstance.InstanceErrorCode,
                InstanceName         = roleInstance == null ? string.Empty : roleInstance.InstanceName,
                InstanceFaultDomain  = roleInstance == null ? string.Empty : roleInstance.InstanceFaultDomain.HasValue
                                                                                  ? roleInstance.InstanceFaultDomain.Value.ToString(CultureInfo.InvariantCulture) : null,
                InstanceUpgradeDomain = roleInstance == null ? string.Empty : roleInstance.InstanceUpgradeDomain.HasValue
                                                                                  ? roleInstance.InstanceUpgradeDomain.Value.ToString(CultureInfo.InvariantCulture) : null,
                Status                      = roleInstance == null ? string.Empty : roleInstance.InstanceStatus,
                GuestAgentStatus            = roleInstance == null ? null : Mapper.Map <PVM.GuestAgentStatus>(roleInstance.GuestAgentStatus),
                ResourceExtensionStatusList = roleInstance == null ? null : Mapper.Map <List <PVM.ResourceExtensionStatus> >(roleInstance.ResourceExtensionStatusList),
                OperationId                 = deployment.RequestId,
                OperationStatus             = deployment.StatusCode.ToString(),
                OperationDescription        = CommandRuntime.ToString(),
                VM = new PersistentVM
                {
                    AvailabilitySetName = vmRole.AvailabilitySetName,
                    Label    = vmRole.Label,
                    RoleName = vmRole.RoleName,
                    RoleSize = vmRole.RoleSize,
                    RoleType = vmRole.RoleType,
                    DefaultWinRmCertificateThumbprint = vmRole.DefaultWinRmCertificateThumbprint,
                    ProvisionGuestAgent         = vmRole.ProvisionGuestAgent,
                    ResourceExtensionReferences = Mapper.Map <PVM.ResourceExtensionReferenceList>(vmRole.ResourceExtensionReferences),
                    DataVirtualHardDisks        = Mapper.Map <Collection <PVM.DataVirtualHardDisk> >(vmRole.DataVirtualHardDisks),
                    OSVirtualHardDisk           = Mapper.Map <PVM.OSVirtualHardDisk>(vmRole.OSVirtualHardDisk),
                    ConfigurationSets           = PersistentVMHelper.MapConfigurationSets(vmRole.ConfigurationSets)
                }
            };

            return(vmContext);
        }