{"id":17541,"date":"2010-08-04T00:01:00","date_gmt":"2010-08-04T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2010\/08\/04\/manipulating-date-ranges-with-windows-powershell\/"},"modified":"2010-08-04T00:01:00","modified_gmt":"2010-08-04T00:01:00","slug":"manipulating-date-ranges-with-windows-powershell","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/manipulating-date-ranges-with-windows-powershell\/","title":{"rendered":"Manipulating Date Ranges with Windows PowerShell"},"content":{"rendered":"<p>&nbsp;\n<img decoding=\"async\" height=\"34\" width=\"34\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" align=\"left\" alt=\"Hey, Scripting Guy! Question\" border=\"0\" title=\"Hey, Scripting Guy! Question\">\nHey, Scripting Guy! I need to be able to add and subtract dates so that I can use the results in custom queries for various Windows event logs using <a href=\"http:\/\/technet.microsoft.com\/en-us\/scriptcenter\/powershell.aspx\">Windows PowerShell<\/a>. Is doing this type of date manipulation easy or hard to do with Windows PowerShell? If it is not too difficult to do, could you whip up some examples of searching date ranges?\n&#8212; SH\n<img decoding=\"async\" height=\"34\" width=\"34\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" align=\"left\" alt=\"Hey, Scripting Guy! Answer\" border=\"0\" title=\"Hey, Scripting Guy! Answer\">\nHello SH,\nMicrosoft Scripting Guy Ed Wilson here. One of the things I used to hate about writing VBScript code was working with dates. It is not that it was difficult, but it did seem a bit arcane. There must have been almost 20 different functions involved in date creation, parsing, and manipulation. Maybe not quite that many, but it <i>seemed<\/i> so. To make matters worse, I began to develop an aversion to parsing dates, and as a result I would do strange things to avoid parsing dates, which in turn made it more difficult (due to lack of familiarity) when I had to parse a date. So the vicious circle continued to wobble out of control until one day I forced myself to spend a day writing nothing but date manipulation code.\nLuckily, date parsing and manipulation in Windows PowerShell is much easier. However, you won&rsquo;t know it is easier until you sit down and spend some time working with the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.datetime_members.aspx\">system.datetime<\/a> .NET Framework object. Why, you may ask, do I refer to the <b>system.datetime<\/b> .NET Framework object when just a minute ago I was talking about dates? Because a date in Windows PowerShell is an instance of a <b>datetime<\/b> (you can leave the word &ldquo;system&rdquo; off if you wish) object. You can use the <b>Get-Member<\/b> cmdlet to see what type of object you are working with. The <b>Get-Date<\/b> cmdlet returns the current date and time. When the current date and time are piped to the <b>Get-Member<\/b> cmdlet, the members of a <b>System.DateTime<\/b> .NET Framework class are displayed. This is shown here:<\/p>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; Get-Date<\/p>\n<p>Monday, August 02, 2010 10:38:36 AM<\/p>\n<p>PS C:&gt; Get-Date | Get-Member<\/p>\n<p><span>&nbsp;&nbsp; <\/span>TypeName: System.DateTime<\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Definition<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<br \/>Add<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;<\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime Add(System.TimeSpan value)<br \/>AddDays<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddDays(double value)<br \/>AddHours<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddHours(double value)<br \/>AddMilliseconds<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMilliseconds(double value)<br \/>AddMinutes<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMinutes(double value)<br \/>AddMonths<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMonths(int months)<br \/>AddSeconds<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddSeconds(double value)<br \/>AddTicks<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddTicks(long value)<br \/>AddYears<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddYears(int value)<br \/>CompareTo<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>int CompareTo(System.Object value), int Compa&#8230;<br \/>Equals<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;<\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>bool Equals(System.Object value), bool Equals&#8230;<br \/>GetDateTimeFormats<span>&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string[] GetDateTimeFormats(), string[] GetDa&#8230;<br \/>GetHashCode<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>int GetHashCode()<br \/>GetType<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>type GetType()<br \/>GetTypeCode<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.TypeCode GetTypeCode()<br \/>IsDaylightSavingTime Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>bool IsDaylightSavingTime()<br \/>Subtract<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.TimeSpan Subtract(System.DateTime valu&#8230;<br \/>ToBinary<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>long ToBinary()<br \/>ToFileTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>long ToFileTime()<br \/>ToFileTimeUtc<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>long ToFileTimeUtc()<br \/>ToLocalTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime ToLocalTime()<br \/>ToLongDateString<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToLongDateString()<br \/>ToLongTimeString<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToLongTimeString()<br \/>ToOADate<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>double ToOADate()<br \/>ToShortDateString<span>&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToShortDateString()<br \/>ToShortTimeString<span>&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToShortTimeString()<br \/>ToString<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToString(), string ToString(string for&#8230;<br \/>ToUniversalTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime ToUniversalTime()<br \/>DisplayHint<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>NoteProperty<span>&nbsp;&nbsp; <\/span>Microsoft.PowerShell.Commands.DisplayHintType&#8230;<br \/>Date<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime Date {get;}<br \/>Day<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp\n; <\/span>System.Int32 Day {get;}<br \/>DayOfWeek<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DayOfWeek DayOfWeek {get;}<br \/>DayOfYear<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 DayOfYear {get;}<br \/>Hour<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;<\/span>System.Int32 Hour {get;}<br \/>Kind<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTimeKind Kind {get;}<br \/>Millisecond<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Millisecond {get;}<br \/>Minute<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Minute {get;}<br \/>Month<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Month {get;}<br \/>Second<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Second {get;}<br \/>Ticks<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int64 Ticks {get;}<br \/>TimeOfDay<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.TimeSpan TimeOfDay {get;}<br \/>Year<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Year {get;}<br \/>DateTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>ScriptProperty System.Object DateTime {get=if ((&amp; { Set-Stri&#8230;<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span>\nThe members, methods, and properties of the <b>System.DateTime<\/b> .NET Framework class that are displayed are instance methods and properties. This means that they work on an instance of the class. Normally, an instance of a class is created when one uses a constructor. Constructors are detailed on MSDN. For example, <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.datetime.datetime.aspx\">the constructor for the System.DateTime class<\/a> indicates that you can use a number of different ways to create an instance of the class. One constructor will accept three integers for input. However, when I supply the month, day, and year, an error arises. A closer look at the constructor indicates that the constructor wants year, month, and day. When this is supplied, a new instance of a <b>system.datetime<\/b> object is created. Because no time value was supplied to the constructor, the time is set to midnight. Here the <b>New-Object<\/b> cmdlet is used to create an instance of a <b>system.datetime<\/b> object:\n<span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #2b91af\">$dte<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">=<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">New-Object<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">system.datetime(<\/span><span style=\"color: #800000\">8<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #800000\">2010<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">New-Object<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">Exception<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">calling<\/span><span style=\"color: #808080\"> &#8220;.ctor&#8221; <\/span><span style=\"color: #000000\">with<\/span><span style=\"color: #808080\"> &#8220;3&#8221; <\/span><span style=\"color: #000000\">argument(s):<\/span><span style=\"color: #808080\"> &#8220;Year, Month, and Day p <br \/>arameters describe an unrepresentable DateTime.&#8221; <br \/><\/span><span style=\"color: #000000\">At<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">line:<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">char:<\/span><span style=\"color: #800000\">18<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">+<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #2b91af\">$dte<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">=<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">New-Object<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">&lt;&lt;&lt;&lt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">system.datetime(<\/span><span style=\"color: #800000\">8<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #800000\">2010<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">+<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">CategoryInfo<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">InvalidOperation:<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">(:)<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #0000ff\">New-Object<\/span><span style=\"color: #000000\">],<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">MethodInvocationE<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">xception<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">+<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">FullyQualifiedErrorId<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">ConstructorInvokedThrowException,Microsoft.PowerShell<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">.Commands.NewObjectCommand<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #2b91af\">$dte<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">=<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">New-Object<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">system.datetime(<\/span><span style=\"color: #800000\">2010<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #800000\">8<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #2b91af\">$dte<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">Sunday,<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">August<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">01<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">2010<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">12<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #800000\">00<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #800000\">00<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">AM<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span>\n<b>Now<\/b> and <b>today<\/b> are both static properties from the <b>system.datetime<\/b> .NET Framework class that return instances of the class. To call a static property, place the class name inside square brackets, use two colons, and then add the property name. To prove that it is a <b>datetime<\/b> object that is returned, use the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.object.gettype.aspx\">gettype method<\/a> that is always available from any <b>system.object<\/b>. This is shown here:<\/p>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; [datetime]::now<\/p>\n<p>Monday, August 02, 2010 10:48:39 AM<\/p>\n<p>PS C:&gt; ([datetime]::now).gettype()<\/p>\n<p>IsPublic IsSerial Name<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>BaseType<br \/>&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8211;<br \/>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>DateTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.ValueType<\/p>\n<p>PS C:&gt; [datetime]::today<\/p>\n<p>Monday, August 02, 2010 12:00:00 AM<\/p>\n<p>PS C:&gt; ([datetime]::today).gettype()<\/p>\n<p>IsPublic IsSerial Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>BaseType<br \/>&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8211;<br \/>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>DateTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.ValueType<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span>\nInterestingly enough, the <b>datetime<\/b> object that is returned via the <b>Get-Date<\/b> cmdlet is the same object that is returned by the static <b>now<\/b> property from the <b>datetime<\/b> class. Use of one or the other is a matter of preference. I generally use the <b>Get-Date<\/b> cmdlet because it is easier to type. Each methodology is illustrated here:\n<span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">[datetime]::now<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">Monday,<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">August<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">02<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">2010<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">10<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #800000\">51<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #800000\">32<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">AM<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">Get-Date<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">Monday,<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">August<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">02<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">2010<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">10<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #800000\">51<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #800000\">35<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">AM<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span>\nAfter you have a <b>datetime<\/b> object, you can use the methods that are exposed by that object. For example, you can easily use one of the various methods to add minutes, hours, days, months, years, etc., to the current date to create a new date in the future or in the past (if you pass a negative number):<\/p>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; $dte = Get-Date<br \/>PS C:&gt; $dte | Get-Member -MemberType method add*<\/p>\n<p><span>&nbsp;&nbsp; <\/span>TypeName: System.DateTime<\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType Definition<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br \/>Add<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime Add(System.TimeSpan value)<br \/>AddDays<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;<\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddDays(double value)<br \/>AddHours<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddHours(double value)<br \/>AddMilliseconds Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMilliseconds(double value)<br \/>AddMinutes<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMinutes(double value)<br \/>AddMonths<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMonths(int months)<br \/>AddSeconds<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddSeconds(double value)<br \/>AddTicks<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddTicks(long value)<br \/>AddYears<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddYears(int value)<\/p>\n<p>PS C:&gt; $dte<\/p>\n<p>Monday, August 02, 2010 10:58:58 AM<\/p>\n<p>PS C:&gt; $dte.AddDays(1)<\/p>\n<p>Tuesday, August 03, 2010 10:58:58 AM<\/p>\n<p>PS C:&gt; $dte.AddDays(-1)<\/p>\n<p>Sunday, August 01, 2010 10:58:58 AM<\/p>\n<p>PS C:&gt; $dte.AddHours(8)<\/p>\n<p>Monday, August 02, 2010 6:58:58 PM<\/p>\n<p>PS C:&gt; $dte.AddHours(-8)<\/p>\n<p>Monday, August 02, 2010 2:58:58 AM<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span>\nThis can easily be incorporated with a cmdlet such as <b>Get-EventLog<\/b>. If I want to see event log entries from the application log that occurred in the last hour, I can use code that looks like this:<\/p>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; Get-EventLog -LogName application -After $dte.AddMinutes(-60)<\/p>\n<p><span>&nbsp;&nbsp; <\/span>Index Time<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>EntryType<span>&nbsp;&nbsp; <\/span>Source<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>InstanceID Message<br \/><span>&nbsp;&nbsp; <\/span>&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;<span>&nbsp;&nbsp; <\/span>&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;- &#8212;&#8212;-<br \/><span>&nbsp;&nbsp; <\/span>19016 Aug 02 10:24<span>&nbsp; <\/span>Information Office Software P&#8230;<span>&nbsp;&nbsp; <\/span>1073742827 The Software&#8230;<br \/><span>&nbsp;&nbsp; <\/span>19015 Aug 02 10:24<span>&nbsp; <\/span>Information Office Software P&#8230;<span>&nbsp;&nbsp; <\/span>1073742827 The Software&#8230;<br \/><span>&nbsp;&nbsp; <\/span>19014 Aug 02 10:24<span>&nbsp; <\/span>Information Office Software P&#8230;<span>&nbsp;&nbsp; <\/span>1073742827 The Software&#8230;<br \/><span>&nbsp;&nbsp; <\/span>19013 Aug 02 10:24<span>&nbsp; <\/span>0<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Office Software P&#8230;<span>&nbsp;&nbsp; <\/span>1073742726 The Software&#8230;<br \/><span>&nbsp;&nbsp; <\/span>19012 Aug 02 10:24<span>&nbsp; <\/span>Information Office Software P&#8230;<span>&nbsp;&nbsp; <\/span>1073742890 Initializati&#8230;<br \/><span>&nbsp;&nbsp; <\/span>19011 Aug 02 10:24<span>&nbsp; <\/span>Information Office Software P&#8230;<span>&nbsp;&nbsp; <\/span>1073742724 The Software&#8230;<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p>When working with two <b>datetime<\/b> objects, you can subtract them and a <b>timespan<\/b> object is returned. This is shown here:<\/p>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; $dte = Get-Date<br \/>PS C:&gt; $sDate = Ge<\/span><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Hey, Scripting Guy! I need to be able to add and subtract dates so that I can use the results in custom queries for various Windows event logs using Windows PowerShell. Is doing this type of date manipulation easy or hard to do with Windows PowerShell? If it is not too difficult to do, [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[13,3,4,45],"class_list":["post-17541","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-dates-and-times","tag-scripting-guy","tag-scripting-techniques","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>&nbsp; Hey, Scripting Guy! I need to be able to add and subtract dates so that I can use the results in custom queries for various Windows event logs using Windows PowerShell. Is doing this type of date manipulation easy or hard to do with Windows PowerShell? If it is not too difficult to do, [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/17541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=17541"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/17541\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=17541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=17541"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=17541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}