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; } }
/// <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(); } } } }
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; } }
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(); } } } }
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); }
// 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()); } }
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); }