/// <summary>
        /// Remove the given subscription from the given account
        /// </summary>
        /// <param name="account">The account to check</param>
        /// <param name="id">The id of the subscription to remove</param>
        public static void RemoveSubscription(this IAzureAccount account, Guid id)
        {
            if (account.HasSubscription(id))
            {
                var remainingSubscriptions = account.GetSubscriptions().Where(s => new Guid(s) != id).ToArray();

                if (remainingSubscriptions.Any())
                {
                    account.SetSubscriptions(remainingSubscriptions);
                }
                else
                {
                    account.ExtendedProperties.Remove(AzureAccount.Property.Subscriptions);
                }
            }
        }
        public IAzureAccount RemoveAccount(string accountId)
        {
            if (string.IsNullOrEmpty(accountId))
            {
                throw new ArgumentNullException("accountId", Resources.UserNameNeedsToBeSpecified);
            }

            if (!Profile.AccountTable.ContainsKey(accountId))
            {
                throw new ArgumentException(Resources.UserNameIsNotValid, "accountId");
            }

            IAzureAccount account = Profile.AccountTable[accountId];

            Profile.AccountTable.Remove(account.Id);

            foreach (AzureSubscription subscription in account.GetSubscriptions(Profile).ToArray())
            {
                if (string.Equals(subscription.GetAccount(), accountId, StringComparison.InvariantCultureIgnoreCase))
                {
                    IAzureAccount remainingAccount = GetSubscriptionAccount(subscription.GetId());
                    // There's no default account to use, remove the subscription.
                    if (remainingAccount == null)
                    {
                        // Warn the user if the removed subscription is the default one.
                        if (subscription.IsPropertySet(AzureSubscription.Property.Default))
                        {
                            Debug.Assert(subscription.Equals(Profile.DefaultSubscription));
                            WriteWarningMessage(Resources.RemoveDefaultSubscription);
                        }

                        Profile.SubscriptionTable.Remove(subscription.GetId());
                    }
                    else
                    {
                        subscription.SetAccount(remainingAccount.Id);
                        AddOrSetSubscription(subscription);
                    }
                }
            }

            return(account);
        }
        /// <summary>
        /// Get the list of subscriptions associated with the given account
        /// </summary>
        /// <param name="account">The account to look for</param>
        /// <param name="profile">The profile to search</param>
        /// <returns>A list of subscriptions available to the given account</returns>
        public static List <IAzureSubscription> GetSubscriptions(this IAzureAccount account, IAzureContextContainer profile)
        {
            string[] subscriptions = new string[0];
            List <IAzureSubscription> subscriptionsList = new List <IAzureSubscription>();

            if (account.IsPropertySet(AzureAccount.Property.Subscriptions))
            {
                subscriptions = account.GetSubscriptions();
            }

            foreach (var subscription in subscriptions)
            {
                var foundSubscription = profile.Subscriptions.FirstOrDefault((s) => string.Equals(s.Id, subscription, StringComparison.OrdinalIgnoreCase));
                if (foundSubscription != null)
                {
                    subscriptionsList.Add(foundSubscription);
                }
            }

            return(subscriptionsList);
        }