magritton
8/19/2016 - 5:47 PM

This example runs C# code inside of a powershell. I needed this when there was one part of the code to test but it could only be tested in p

This example runs C# code inside of a powershell. I needed this when there was one part of the code to test but it could only be tested in production.

$Assem = ( 
    "Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c",
    #"Microsoft.SharePoint.Administration, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c",
    "Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
    ) 


$Source = @"
using Microsoft.SharePoint.Publishing.Administration;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System; 

namespace MikeG2.Test 
{ 

public static class UpdateToday 
    {
        private static string _curVersion = "1.0.4";
        public static void Get() 
        { 
      // for each site collection .. update the "today" function
        string _logMessage = "";
        SPDiagnosticsService diagnosticsService = SPDiagnosticsService.Local;
        SPDiagnosticsCategory cat = diagnosticsService.Areas["SharePoint Foundation"].Categories["Unknown"];

        _logMessage = "Dynamic Today Timer Service Started";
        SPDiagnosticsService.Local.WriteTrace(1, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);

      //   false = won't use SPContext.  true does
      //   false starts at the Farm level and searches down for the first WSS root Site Collection
      SPFarm farm = SPFarm.Local;
      SPListItemCollection listItems = null;
      foreach (SPService service in farm.Services) {
        SPWebService webService = service as SPWebService;
        // webService.TypeName is found Central Admin Services on Server
        if (webService != null && webService.TypeName == "Microsoft SharePoint Foundation Web Application")
        {
          foreach (SPWebApplication app in webService.WebApplications) {
            //Console.WriteLine ("DT Application: {0}" + " - {1}", app.DisplayName, app.Name);
            _logMessage = "DT Application: " + app.DisplayName + " - " + app.Name + ", Version: " + _curVersion;
            SPDiagnosticsService.Local.WriteTrace(1, cat, TraceSeverity.Medium, _logMessage);

            foreach (SPContentDatabase db in app.ContentDatabases) {
              // db.Name
              //Console.WriteLine ("DB Name: {0}", db.Name);
              _logMessage = "DT DB Name: " + db.Name;
              SPDiagnosticsService.Local.WriteTrace(1, cat, TraceSeverity.Medium, _logMessage);
              int count = 0;
              foreach (SPSite siteCollection in db.Sites) {
                //Console.WriteLine ("Site Collection URL: {0}", siteCollection.ServerRelativeUrl);
                _logMessage = "DT Site Collection URL: " + siteCollection.ServerRelativeUrl.ToString();
                SPDiagnosticsService.Local.WriteTrace(1, cat, TraceSeverity.Medium, _logMessage);
                count++;
                foreach (SPWeb site in siteCollection.AllWebs) {
                  foreach (SPList list in site.Lists) {
                    try {
                      foreach (SPField field in list.Fields) {
                        if (field.FieldReferences != null) {
                          foreach (String fieldRef in field.FieldReferences) {
                            if (fieldRef.ToUpper () == "TODAY") {
                              site.AllowUnsafeUpdates = true;

                              // turn off events .. we're not changing anything ...
                              HandleEventFiring eventFiring = new HandleEventFiring ();
                              eventFiring.CustomDisableEventFiring ();

                              // everytime we call list.Items .. it querys the database
                              // so copy these item into a SPListItemCollection and use that
                              listItems = list.Items;

                              try {
                                foreach (SPListItem item in listItems) {
                                  item.SystemUpdate (false); // false tells it to NOT update the version level
                                }
                                _logMessage = "DT Site: " + site.Title + ",  List: " + list.Title + ", Items Updated: " + list.ItemCount.ToString ();
                              }
                              catch (Exception ex) {
                                _logMessage = "ERROR - DT Site: " + site.Title + ", List: " + list.Title + ", Exception: " + ex.Message;
                              }
                              finally {
                                site.AllowUnsafeUpdates = false;
                                // turn events back on
                                eventFiring.CustomEnableEventFiring ();
                              }

                              SPDiagnosticsService.Local.WriteTrace(1, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
                            } // if (fieldRef
                          } // foreach (String fieldRef
                        } // if !field.FieldReferences == null
                      } // foreach (SPField field
                    }
                    catch (Exception ex) {
                      _logMessage = "Site: " + site.Title + ", List: " + list.Title + ", Exception: " + ex.Message;
                      SPDiagnosticsService.Local.WriteTrace(1, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
                    }
                  } // foreach (SPList list
                  site.Dispose ();
                } // foreach (SPWeb site
                siteCollection.Dispose ();
              } // foreach (SPSite siteCollection
            } // foreach (SPContentDatabase db
          } // foreach (SPWebApplication app
        } // if (webService != null
      } //foreach (SPService service
      SPDiagnosticsService.Local.WriteTrace(1, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
      }//end the function
    }//close class
    
      public class HandleEventFiring : SPItemEventReceiver
      {
        /// <summary>
        /// 
        /// </summary>
        public HandleEventFiring ()
        {
        }
        /// <summary>
        /// 
        /// </summary>
        public void CustomDisableEventFiring ()
        {
          //this.DisableEventFiring ();
          this.EventFiringEnabled = false;
        }
        /// <summary>
        /// 
        /// </summary>
        public void CustomEnableEventFiring ()
        {
          //this.EnableEventFiring ();
          this.EventFiringEnabled = true;
        }
      }

}//close namespace
"@ 
Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp  

[MikeG2.Test.UpdateToday]::Get()
$Assem = ( 
    "Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c",
    #"Microsoft.SharePoint.Administration, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c",
    "Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
    ) 


$Source = @"
using Microsoft.SharePoint.Publishing.Administration;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System; 

namespace MikeG2.Test 
{ 

public static class UpdateToday 
    {
        private static string _curVersion = "1.0.4";
        public static void Get() 
        { 
      // for each site collection .. update the "today" function
        string _logMessage = "";
        SPDiagnosticsService diagnosticsService = SPDiagnosticsService.Local;
        SPDiagnosticsCategory cat = diagnosticsService.Areas["SharePoint Foundation"].Categories["Unknown"];

        _logMessage = "Dynamic Today Timer Service Started";
        SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);

      //   false = won't use SPContext.  true does
      //   false starts at the Farm level and searches down for the first WSS root Site Collection
      SPFarm farm = SPFarm.Local;
      SPListItemCollection listItems = null;
      foreach (SPService service in farm.Services) {
        SPWebService webService = service as SPWebService;
        // webService.TypeName is found Central Admin Services on Server
        if (webService != null && webService.TypeName == "Microsoft SharePoint Foundation Web Application")
        {
          foreach (SPWebApplication app in webService.WebApplications) {
            //Console.WriteLine ("DT Application: {0}" + " - {1}", app.DisplayName, app.Name);
            _logMessage = "DT Application: " + app.DisplayName + " - " + app.Name + ", Version: " + _curVersion;
            SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);

            foreach (SPContentDatabase db in app.ContentDatabases) {
              // db.Name
              //Console.WriteLine ("DB Name: {0}", db.Name);
              _logMessage = "DT DB Name: " + db.Name;
              SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);
              int count = 0;
              foreach (SPSite siteCollection in db.Sites) {
                //Console.WriteLine ("Site Collection URL: {0}", siteCollection.ServerRelativeUrl);
                _logMessage = "DT Site Collection URL: " + siteCollection.ServerRelativeUrl.ToString();
                SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);
                count++;
                foreach (SPWeb site in siteCollection.AllWebs) {
                  foreach (SPList list in site.Lists) {
                    try {
			_logMessage = "DT Site: " + site.Title + ",  List: " + list.Title;
			SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);
                      foreach (SPField field in list.Fields) {
                        if (field.FieldReferences != null) {
                          foreach (String fieldRef in field.FieldReferences) {
///Everything with three "///" has been commented out to prevent executing against the list items
                            if (fieldRef.ToUpper () == "TODAY") {
                              ///site.AllowUnsafeUpdates = true;

                              // turn off events .. we're not changing anything ...
                              HandleEventFiring eventFiring = new HandleEventFiring ();
                              ///eventFiring.CustomDisableEventFiring ();

                              // everytime we call list.Items .. it querys the database
                              // so copy these item into a SPListItemCollection and use that
                              listItems = list.Items;

                              try {
                                foreach (SPListItem item in listItems) {
                                  ///item.SystemUpdate (false); // false tells it to NOT update the version level
				  string xx = "";
				  xx += "f";
                                }
                                _logMessage = "DT Site: " + site.Title + ",  List: " + list.Title + ", Items Updated: " + list.ItemCount.ToString ();
                              }
                              catch (Exception ex) {
                                _logMessage = "ERROR - DT Site: " + site.Title + ", List: " + list.Title + ", Exception: " + ex.Message;
                              }
                              finally {
                                ///site.AllowUnsafeUpdates = false;
                                // turn events back on
                                ///eventFiring.CustomEnableEventFiring ();
				string yy = "";
				yy += "f";
                              }

                              SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
                            } // if (fieldRef
                          } // foreach (String fieldRef
                        } // if !field.FieldReferences == null
                      } // foreach (SPField field
                    }
                    catch (Exception ex) {
                      _logMessage = "Site: " + site.Title + ", List: " + list.Title + ", Exception: " + ex.Message;
                      SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
                    }
                  } // foreach (SPList list
                  site.Dispose ();
                } // foreach (SPWeb site
                siteCollection.Dispose ();
              } // foreach (SPSite siteCollection
            } // foreach (SPContentDatabase db
          } // foreach (SPWebApplication app
        } // if (webService != null
      } //foreach (SPService service
      SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
      }//end the function
    }//close class
    
      public class HandleEventFiring : SPItemEventReceiver
      {
        /// <summary>
        /// 
        /// </summary>
        public HandleEventFiring ()
        {
        }
        /// <summary>
        /// 
        /// </summary>
        public void CustomDisableEventFiring ()
        {
          //this.DisableEventFiring ();
          this.EventFiringEnabled = false;
        }
        /// <summary>
        /// 
        /// </summary>
        public void CustomEnableEventFiring ()
        {
          //this.EnableEventFiring ();
          this.EventFiringEnabled = true;
        }
      }

}//close namespace
"@ 
Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp  

[MikeG2.Test.UpdateToday]::Get()

$path = "F:\temp\temp.log"
If (Test-Path $path){
	Remove-Item $path
}

Merge-SPLogFile -path $path -Overwrite -EventID 2 -StartTime "03/31/2017 10:04" -EndTime "03/31/2017 12:30"
Get-Content $path
notepad $path
$Assem = ( 
    "Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c",
    #"Microsoft.SharePoint.Administration, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c",
    "Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
    ) 


$Source = @"
using Microsoft.SharePoint.Publishing.Administration;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System; 

namespace MikeG2.Test 
{ 

public static class UpdateToday 
{
private static string _curVersion = "1.0.4";
public static void Doit()
    {
      // for each site collection .. update the "today" function
        string _logMessage = "";
        SPDiagnosticsService diagnosticsService = SPDiagnosticsService.Local;
        SPDiagnosticsCategory cat = diagnosticsService.Areas["SharePoint Foundation"].Categories["Unknown"];
        //SPDiagnosticsCategory cat = new SPDiagnosticsCategory("DynamicToday", TraceSeverity.High, EventSeverity.Warning);

        _logMessage = "Dynamic Today Timer Service Started";
        SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);

      //   false = won't use SPContext.  true does
      //   false starts at the Farm level and searches down for the first WSS root Site Collection
      SPFarm farm = SPFarm.Local;
      SPListItemCollection listItems = null;
      foreach (SPService service in farm.Services) {
        SPWebService webService = service as SPWebService;
        // webService.TypeName is found Central Admin Services on Server
        if (webService != null && webService.TypeName == "Microsoft SharePoint Foundation Web Application")
        {
		SPWebApplicationCollection apps = webService.WebApplications;
          foreach (SPWebApplication app in apps) {
            //Console.WriteLine ("DT Application: {0}" + " - {1}", app.DisplayName, app.Name);
            _logMessage = "DT Application: " + app.DisplayName + " - " + app.Name + ", Version: " + _curVersion;
            SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);

		SPContentDatabaseCollection spc = app.ContentDatabases;
            foreach (SPContentDatabase db in spc) {
              // db.Name
              //Console.WriteLine ("DB Name: {0}", db.Name);
              _logMessage = "DT DB Name: " + db.Name;
		if(db.Name == "WSS_Content_130"){
              SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);
              int count = 0;
              try
              {
		SPSiteCollection sc = db.Sites;
                  foreach (SPSite siteCollection in sc)
                  {
                      //Console.WriteLine ("Site Collection URL: {0}", siteCollection.ServerRelativeUrl);
                      _logMessage = "DT Site Collection URL: " + siteCollection.ServerRelativeUrl.ToString();
                      SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);
                      count++;
                      foreach (SPWeb site in siteCollection.AllWebs)
                      {
                          _logMessage = "DT Site URL: " + site.ServerRelativeUrl.ToString();
                          SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);
                          foreach (SPList list in site.Lists)
                          {
				_logMessage = "DT List URL: " + list.Title;
                          	SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);
                              try
                              {
                                  foreach (SPField field in list.Fields)
                                  {
                                      if (field.FieldReferences != null)
                                      {
						_logMessage = "DT Field Ref Found: " + field.Title;
		                          	SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage);
                                          foreach (String fieldRef in field.FieldReferences)
                                          {
                                              if (fieldRef.ToUpper() == "TODAY")
                                              {
                                                  site.AllowUnsafeUpdates = true;

                                                  // turn off events .. we're not changing anything ...
                                                  HandleEventFiring eventFiring = new HandleEventFiring();
                                                  eventFiring.CustomDisableEventFiring();

                                                  // everytime we call list.Items .. it querys the database
                                                  // so copy these item into a SPListItemCollection and use that
                                                  listItems = list.Items;

                                                  try
                                                  {
                                                      foreach (SPListItem item in listItems)
                                                      {
                                                          item.SystemUpdate(false); // false tells it to NOT update the version level
                                                      }
                                                      _logMessage = "DT Site: " + site.Title + ",  List: " + list.Title + ", Items Updated: " + list.ItemCount.ToString();
                                                  }
                                                  catch (Exception ex)
                                                  {
                                                      _logMessage = "ERROR - DT Site: " + site.Title + ", List: " + list.Title + ", Exception: " + ex.Message;
                                                  }
                                                  finally
                                                  {
                                                      site.AllowUnsafeUpdates = false;
                                                      // turn events back on
                                                      eventFiring.CustomEnableEventFiring();
                                                  }

                                                  SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
                                              } // if (fieldRef
                                          } // foreach (String fieldRef
                                      } // if !field.FieldReferences == null
                                  } // foreach (SPField field
                              }
                              catch (Exception ex)
                              {
                                  _logMessage = "Site: " + site.Title + ", List: " + list.Title + ", Exception: " + ex.Message;
                                  SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
                              }
                          } // foreach (SPList list
                          site.Dispose();
                      } // foreach (SPWeb site
                      siteCollection.Dispose();
                  } // foreach (SPSite siteCollection
              }
              catch (Exception ex)
              {
                  _logMessage = "Error encountered at the site collection level, Exception: " + ex.Message;
                  SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
              }
		}//end if
            } // foreach (SPContentDatabase db
          } // foreach (SPWebApplication app
        } // if (webService != null
      } //foreach (SPService service
      SPDiagnosticsService.Local.WriteTrace(2, cat, TraceSeverity.Medium, _logMessage, cat.Name, cat.Area.Name);
    }
    }//end the class
    
    public class HandleEventFiring : SPItemEventReceiver
  {
    /// <summary>
    /// 
    /// </summary>
    public HandleEventFiring ()
    {
    }
    /// <summary>
    /// 
    /// </summary>
    public void CustomDisableEventFiring ()
    {
      //this.DisableEventFiring ();
      this.EventFiringEnabled = false;
    }
    /// <summary>
    /// 
    /// </summary>
    public void CustomEnableEventFiring ()
    {
      //this.EnableEventFiring ();
      this.EventFiringEnabled = true;
    }
  }
  
}//close namespace
"@ 

Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp  

[MikeG2.Test.UpdateToday]::Doit()