예제 #1
0
        static void Main(string[] args)
        {
            SecureString pwd      = new SecureString();
            string       Username = args[0];
            string       password = args[1];
            string       url      = args[2];

            try
            {
                using (ClientContext ctx = new ClientContext(url))
                {
                    foreach (char c in password.ToArray())
                    {
                        pwd.AppendChar(c);
                    }
                    ctx.Credentials = new SharePointOnlineCredentials(Username, pwd);
                    RecycleBinItemCollection recycleBinItems = ctx.Site.GetRecycleBinItems("", 2000, false, RecycleBinOrderBy.DeletedDate, RecycleBinItemState.SecondStageRecycleBin);
                    ctx.ExecuteQuery();
                    while (recycleBinItems != null)
                    {
                        ctx.Load(recycleBinItems);
                        recycleBinItems.DeleteAll();
                        ctx.ExecuteQuery();
                        Console.WriteLine("items deleted");
                    }
                }
            }
            catch (Exception ex) { Console.WriteLine(ex); }
            Console.ReadLine();
        }
        protected override void ExecuteCmdlet()
        {
            switch (ParameterSetName)
            {
            case PARAMETERSET_IDENTITY:
                var recycleBinItem = Identity.GetRecycleBinItem(ClientContext.Site);

                if (Force || ShouldContinue(string.Format(Resources.ClearRecycleBinItem, recycleBinItem.LeafName), Resources.Confirm))
                {
                    recycleBinItem.DeleteObject();
                    ClientContext.ExecuteQueryRetry();
                }
                break;

            case PARAMETERSET_ALL:
                if (ParameterSpecified(nameof(RowLimit)))
                {
                    if (Force || ShouldContinue(SecondStageOnly ? Resources.ClearSecondStageRecycleBin : Resources.ClearBothRecycleBins, Resources.Confirm))
                    {
                        RecycleBinItemState recycleBinStage = SecondStageOnly ? RecycleBinItemState.SecondStageRecycleBin : RecycleBinItemState.None;

                        RecycleBinItemCollection items = ClientContext.Site.GetRecycleBinItems(null, RowLimit, false, RecycleBinOrderBy.DeletedDate, recycleBinStage);
                        ClientContext.Load(items);
                        ClientContext.ExecuteQueryRetry();

                        items.DeleteAll();
                        ClientContext.ExecuteQueryRetry();
                    }
                }
                else
                {
                    if (SecondStageOnly)
                    {
                        if (Force || ShouldContinue(Resources.ClearSecondStageRecycleBin, Resources.Confirm))
                        {
                            ClientContext.Site.RecycleBin.DeleteAllSecondStageItems();
                            ClientContext.ExecuteQueryRetry();
                        }
                    }
                    else
                    {
                        if (Force || ShouldContinue(Resources.ClearBothRecycleBins, Resources.Confirm))
                        {
                            ClientContext.Site.RecycleBin.DeleteAll();
                            ClientContext.ExecuteQueryRetry();
                        }
                    }
                }
                break;
            }
        }
예제 #3
0
        /// <summary>
        /// Convert to List and sort
        /// </summary>
        /// <param name="items"></param>
        /// <returns></returns>
        private static List <RecycleBinItem> CovertToRecycleBinItemList(RecycleBinItemCollection items)
        {
            var recycleBinItems = items.ToList();

            recycleBinItems.Sort((x, y) =>
            {
                if (x.DeletedDate > y.DeletedDate)
                {
                    return(1);
                }
                if (x.DeletedDate < y.DeletedDate)
                {
                    return(-1);
                }
                return(-0);
            });
            return(recycleBinItems);
        }
        private void RestoreList(String title, SPRemoteEventProperties properties)
        {
            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, useAppWeb: false))
            {
                if (clientContext != null)
                {
                    // Check to see that a user hasn't manually deleted the list from the Recycle Bin
                    RecycleBinItemCollection     bin           = clientContext.Web.RecycleBin;
                    IEnumerable <RecycleBinItem> matchingItems = clientContext.LoadQuery(bin.Where(item => item.Title == title));
                    clientContext.ExecuteQuery();
                    RecycleBinItem recycledList = matchingItems.FirstOrDefault();

                    // If it is there, restore it.
                    if (recycledList != null)
                    {
                        recycledList.Restore();
                        clientContext.ExecuteQuery();
                    }
                }
            }
        }
예제 #5
0
        protected override void ExecuteCmdlet()
        {
            switch (ParameterSetName)
            {
            case PARAMETERSET_IDENTITY:
                var recycleBinItem = Identity.GetRecycleBinItem(ClientContext.Site);

                if (Force || ShouldContinue(string.Format(Resources.RestoreRecycleBinItem, recycleBinItem.LeafName), Resources.Confirm))
                {
                    recycleBinItem.Restore();
                    ClientContext.ExecuteQueryRetry();
                }
                break;

            case PARAMETERSET_ALL:
#if !SP2013
                if (ParameterSpecified(nameof(RowLimit)))
                {
                    if (Force || ShouldContinue(Resources.RestoreRecycleBinItems, Resources.Confirm))
                    {
                        RecycleBinItemCollection items = ClientContext.Site.GetRecycleBinItems(null, RowLimit, false, RecycleBinOrderBy.DeletedDate, RecycleBinItemState.None);
                        ClientContext.Load(items);
                        ClientContext.ExecuteQueryRetry();

                        items.RestoreAll();
                        ClientContext.ExecuteQueryRetry();
                    }
                }
                else
#endif
                {
                    if (Force || ShouldContinue(Resources.RestoreRecycleBinItems, Resources.Confirm))
                    {
                        ClientContext.Site.RecycleBin.RestoreAll();
                        ClientContext.ExecuteQueryRetry();
                    }
                }
                break;
            }
        }
예제 #6
0
        protected override void ExecuteCmdlet()
        {
            if (ParameterSpecified(nameof(Identity)))
            {
                var recycleBinItem = Identity.GetRecycleBinItem(ClientContext.Site);

                if (Force || ShouldContinue(string.Format(Resources.RestoreRecycleBinItem, recycleBinItem.LeafName), Resources.Confirm))
                {
                    recycleBinItem.Restore();
                    ClientContext.ExecuteQueryRetry();
                }
            }
            else
            {
                if (ParameterSpecified(nameof(RowLimit)))
                {
                    if (Force || ShouldContinue(Resources.RestoreRecycleBinItems, Resources.Confirm))
                    {
                        RecycleBinItemCollection items = ClientContext.Site.GetRecycleBinItems(null, RowLimit, false, RecycleBinOrderBy.DeletedDate, RecycleBinItemState.None);
                        ClientContext.Load(items);
                        ClientContext.ExecuteQueryRetry();

                        items.RestoreAll();
                        ClientContext.ExecuteQueryRetry();
                    }
                }
                else
                {
                    if (Force || ShouldContinue(Resources.RestoreRecycleBinItems, Resources.Confirm))
                    {
                        ClientContext.Site.RecycleBin.RestoreAll();
                        ClientContext.ExecuteQueryRetry();
                    }
                }
            }
        }
예제 #7
0
        protected override void ExecuteCmdlet()
        {
            DefaultRetrievalExpressions = new Expression <Func <RecycleBinItem, object> >[] { r => r.Id, r => r.Title, r => r.ItemType, r => r.LeafName, r => r.DirName };
            if (ParameterSetName == ParameterSet_IDENTITY)
            {
                RecycleBinItem item = ClientContext.Site.RecycleBin.GetById(Identity.Id);

                ClientContext.Load(item, RetrievalExpressions);
                ClientContext.ExecuteQueryRetry();
                WriteObject(item);
            }
            else
            {
#if !SP2013
                if (ParameterSpecified(nameof(RowLimit)))
                {
                    RecycleBinItemState recycleBinStage;
                    switch (ParameterSetName)
                    {
                    case ParameterSet_FIRSTSTAGE:
                        recycleBinStage = RecycleBinItemState.FirstStageRecycleBin;
                        break;

                    case ParameterSet_SECONDSTAGE:
                        recycleBinStage = RecycleBinItemState.SecondStageRecycleBin;
                        break;

                    default:
                        recycleBinStage = RecycleBinItemState.None;
                        break;
                    }

                    RecycleBinItemCollection items = ClientContext.Site.GetRecycleBinItems(null, RowLimit, false, RecycleBinOrderBy.DeletedDate, recycleBinStage);
                    ClientContext.Load(items);
                    ClientContext.ExecuteQueryRetry();

                    List <RecycleBinItem> recycleBinItemList = items.ToList();
                    WriteObject(recycleBinItemList, true);
                }
                else
                {
                    ClientContext.Site.Context.Load(ClientContext.Site.RecycleBin, r => r.IncludeWithDefaultProperties(RetrievalExpressions));
                    ClientContext.Site.Context.ExecuteQueryRetry();

                    List <RecycleBinItem> recycleBinItemList = ClientContext.Site.RecycleBin.ToList();

                    switch (ParameterSetName)
                    {
                    case ParameterSet_FIRSTSTAGE:
                        WriteObject(
                            recycleBinItemList.Where(i => i.ItemState == RecycleBinItemState.FirstStageRecycleBin), true);
                        break;

                    case ParameterSet_SECONDSTAGE:
                        WriteObject(
                            recycleBinItemList.Where(i => i.ItemState == RecycleBinItemState.SecondStageRecycleBin),
                            true);
                        break;

                    default:
                        WriteObject(recycleBinItemList, true);
                        break;
                    }
                }
#else
                ClientContext.Site.Context.Load(ClientContext.Site.RecycleBin, r => r.IncludeWithDefaultProperties(RetrievalExpressions));
                ClientContext.Site.Context.ExecuteQueryRetry();

                List <RecycleBinItem> recycleBinItemList = ClientContext.Site.RecycleBin.ToList();

                switch (ParameterSetName)
                {
                case ParameterSet_FIRSTSTAGE:
                    WriteObject(
                        recycleBinItemList.Where(i => i.ItemState == RecycleBinItemState.FirstStageRecycleBin), true);
                    break;

                case ParameterSet_SECONDSTAGE:
                    WriteObject(
                        recycleBinItemList.Where(i => i.ItemState == RecycleBinItemState.SecondStageRecycleBin),
                        true);
                    break;

                default:
                    WriteObject(recycleBinItemList, true);
                    break;
                }
#endif
            }
        }
        /// <summary>
        /// Execute the cmdlet
        /// </summary>
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();
            if (!RecycleBinType.HasValue)
            {
                RecycleBinType = RecycleBinItemType.Folder;
            }
            if (!RecycleBinOrder.HasValue)
            {
                RecycleBinOrder = RecycleBinOrderBy.DeletedBy;
            }
            if (!RowLimit.HasValue)
            {
                RowLimit = 200;
            }

            var results        = new Collection <SPRecycleBinElement>();
            var failedrestores = new Collection <SPRecycleBinElement>();
            var restorepath    = new Collection <SPRecycleBinRestoreModel>();

            // this should be valid based on pre authentication checks
            var _currentUserInProcess = CurrentUserName;

            LogVerbose("Started-QueryRecycleBin: User:{0} at {1}", _currentUserInProcess, DateTime.Now);

            var collSite = this.ClientContext.Site;
            var collWeb  = this.ClientContext.Web;

            this.ClientContext.Load(collSite);
            this.ClientContext.Load(collWeb);
            this.ClientContext.ExecuteQueryRetry();


            if (this.SitePathUrl.IndexOf("/", StringComparison.CurrentCultureIgnoreCase) == 0)
            {
                SitePathUrl = SitePathUrl.Substring(1);
            }

            var    rbiQueryCount      = 0;
            var    rbiCollectionCount = 0;
            var    pagingLimit        = RowLimit.Value;
            var    paging             = true;
            string pagingInfo         = null;

            try
            {
                while (paging)
                {
                    LogVerbose("Paging Recycle bin {0} with paging sequence [{1}]", SitePathUrl, pagingInfo);

                    RecycleBinItemCollection recycleBinCollection = collSite.GetRecycleBinItems(pagingInfo, pagingLimit, false, RecycleBinOrder.Value, RecycleBinItemState.FirstStageRecycleBin);
                    this.ClientContext.Load(recycleBinCollection);
                    this.ClientContext.ExecuteQueryRetry();
                    paging = false;

                    if (recycleBinCollection != null && recycleBinCollection.Count > 0)
                    {
                        var rbiQuery = recycleBinCollection.Where(w => w.DirName.StartsWith(this.SitePathUrl, StringComparison.CurrentCultureIgnoreCase) &&
                                                                  w.ItemType == RecycleBinType).OrderBy(ob => ob.DirName);
                        rbiQueryCount      = rbiQuery.Count();
                        rbiCollectionCount = recycleBinCollection.Count();
                        LogVerbose("Query resulted in {0} items", rbiQueryCount);

                        foreach (var rbiItem in rbiQuery)
                        {
                            var newitem = new SPRecycleBinRestoreModel()
                            {
                                Title          = rbiItem.Title,
                                Id             = rbiItem.Id,
                                FileSize       = rbiItem.Size,
                                LeafName       = rbiItem.LeafName,
                                DirName        = rbiItem.DirName,
                                FileType       = rbiItem.ItemType,
                                FileState      = rbiItem.ItemState,
                                Author         = rbiItem.AuthorName,
                                AuthorEmail    = rbiItem.AuthorEmail,
                                DeletedBy      = rbiItem.DeletedByName,
                                DeletedByEmail = rbiItem.DeletedByEmail,
                                Deleted        = rbiItem.DeletedDate,
                                PagingInfo     = pagingInfo
                            };

                            restorepath.Add(newitem);
                        }

                        if (rbiCollectionCount >= pagingLimit)
                        {
                            var pageItem        = recycleBinCollection[recycleBinCollection.Count() - 1];
                            var leafNameEncoded = HttpUtility.UrlPathEncode(pageItem.Title, true).Replace(".", "%2E");
                            var searchEncoded   = HttpUtility.UrlPathEncode(pageItem.DirName, true);
                            pagingInfo = string.Format("id={0}&title={1}&searchValue={2}", pageItem.Id, leafNameEncoded, searchEncoded);
                            paging     = true;
                        }
                    }
                    else
                    {
                        LogVerbose("The Recycle Bin is empty.");
                    }
                }

                if (restorepath.Count() > 0)
                {
                    var orderedrestore = restorepath.OrderBy(ob => ob.DirName);
                    LogVerbose("Restoring: {0} items for {1}", restorepath.Count, SitePathUrl);
                    foreach (var newitem in orderedrestore)
                    {
                        if (this.ShouldProcess(string.Format("Restoring {0} from recycle bin", newitem.LeafName)))
                        {
                            try
                            {
                                var rbiItem = collSite.RecycleBin.GetById(newitem.Id);
                                this.ClientContext.Load(rbiItem);
                                this.ClientContext.ExecuteQueryRetry();

                                rbiItem.Restore();
                                this.ClientContext.ExecuteQueryRetry();
                                results.Add(newitem);
                                LogVerbose("Restored: {0}|{1}, Deleted By:{2}", newitem.DirName, newitem.LeafName, newitem.DeletedByEmail);
                            }
                            catch (Exception ex)
                            {
                                rbiQueryCount--;
                                failedrestores.Add(newitem);
                                LogWarning("Failed: {0}|{1} MSG:{2}", newitem.DirName, newitem.LeafName, ex.Message);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogError(ex, "Failed to retrieve recycle bin collection");
            }

            WriteObject(results);
            LogVerbose("Completed: {0} from UserID {1}", DateTime.Now, _currentUserInProcess);
        }
예제 #9
0
        // Populate CBO Drop-down Via SP OnPrem
        private void PopulateDGVviaOnPrem()
        {
            try
            {
                using (SPOnPremContext = new ClientContext(cboSiteURL.SelectedItem.ToString()))
                {
                    if (SPOnPremContext != null)
                    {
                        //Get the SP Web
                        Web web = SPOnPremContext.Web;

                        // Get all the recycle bin items
                        // Reference: https://msdn.microsoft.com/EN-US/library/microsoft.sharepoint.client.recyclebinitem_members.aspx
                        RecycleBinItemCollection rbiColl = web.RecycleBin;
                        SPOnPremContext.Load(rbiColl);

                        // Execute the query to the server
                        SPOnPremContext.ExecuteQuery();

                        if (rbiColl.Count > 0)
                        {
                            switch (cboSiteURL.SelectedItem.ToString())
                            {
                            default:
                                DataTable table = new DataTable();
                                table.Columns.Add("Name");
                                table.Columns.Add("Original Location");
                                //table.Columns.Add("Deleted By");
                                table.Columns.Add("Deleted");

                                // Fill the DataTable
                                // Loop through each recycle bin item
                                foreach (RecycleBinItem rbiItem in rbiColl)
                                {
                                    table.Rows.Add(rbiItem.Title, rbiItem.DirName, rbiItem.DeletedDate);
                                }

                                // Bind data to datagridView
                                recycleBinDGV.DataSource = table;
                                recycleBinDGV.AutoResizeColumns();
                                recycleBinDGV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
                                lblRBCountAmt.Text = rbiColl.Count.ToString();

                                break;
                            } // END ON PREM SWITCH
                        }
                        else
                        {
                            MessageBox.Show("Recycle Bin is empty");

                            // Clear DGV DataSource
                            recycleBinDGV.DataSource = null;
                            lblRBCountAmt.ResetText();
                        }


                        // Clear DGV DataSource
                        //recycleBinDGV.DataSource = null;
                        //lblRecycleBinTotal.ResetText();
                    } // END IF
                }     // END USING
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
예제 #10
0
        private string TryRecycleList(String listTitle, SPRemoteEventProperties properties)
        {
            string errorMessage = String.Empty;

            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, useAppWeb: false))
            {
                if (clientContext != null)
                {
                    // Get references to all the objects you are going to need.
                    ListCollection               allLists                = clientContext.Web.Lists;
                    IEnumerable <List>           matchingLists           = clientContext.LoadQuery(allLists.Where(list => list.Title == listTitle));
                    RecycleBinItemCollection     bin                     = clientContext.Web.RecycleBin;
                    IEnumerable <RecycleBinItem> matchingRecycleBinItems = clientContext.LoadQuery(bin.Where(item => item.Title == listTitle));

                    clientContext.ExecuteQuery();

                    List           foundList    = matchingLists.FirstOrDefault();
                    RecycleBinItem recycledList = matchingRecycleBinItems.FirstOrDefault();

                    // Delegate the rollback logic to the SharePoint server.
                    ExceptionHandlingScope scope = new ExceptionHandlingScope(clientContext);
                    using (scope.StartScope())
                    {
                        using (scope.StartTry())
                        {
                            // Check to see that a user hasn't already recycled the list in the SharePoint UI.
                            // If it is still there, recycle it.
                            ConditionalScope condScope = new ConditionalScope(clientContext, () => foundList.ServerObjectIsNull.Value == false, true);
                            using (condScope.StartScope())
                            {
                                // Looks crazy to test for nullity inside a test for nullity,
                                // but without this inner test, foundList.Recycle() throws a null reference
                                // exception when the client side runtime is creating the XML to
                                // send to the server.
                                if (foundList != null)
                                {
                                    foundList.Recycle();
                                }
                            }
                            // To test that your StartCatch block runs, uncomment the following two lines
                            // and put them somewhere in the StartTry block.
                            //List fakeList = clientContext.Web.Lists.GetByTitle("NoSuchList");
                            //clientContext.Load(fakeList);
                        }
                        using (scope.StartCatch())
                        {
                            // Check to see that the list is in the Recycle Bin.
                            // A user might have manually deleted the list from the Recycle Bin,
                            // or StartTry block may have errored before it recycled the list.
                            // If it is in the Recycle Bin, restore it.
                            ConditionalScope condScope = new ConditionalScope(clientContext, () => recycledList.ServerObjectIsNull.Value == false, true);
                            using (condScope.StartScope())
                            {
                                // Another test within a test to avoid a null reference.
                                if (recycledList != null)
                                {
                                    recycledList.Restore();
                                }
                            }
                        }
                        using (scope.StartFinally())
                        {
                        }
                    }
                    clientContext.ExecuteQuery();

                    if (scope.HasException)
                    {
                        errorMessage = String.Format("{0}: {1}; {2}; {3}; {4}; {5}", scope.ServerErrorTypeName, scope.ErrorMessage, scope.ServerErrorDetails, scope.ServerErrorValue, scope.ServerStackTrace, scope.ServerErrorCode);
                    }
                }
            }
            return(errorMessage);
        }