Manipulating dates is always tricky. However, PowerShell's
Get-Date cmdlet does a wonderful job of interpreting the different
international formats for day / month / year. As a result, what
ever your computer's country locale, it will be easy to calculate how
many days there are to Christmas.
Topics for Windows PowerShell Get-Date and DateTime
Normally I like to use a learning progression where we begin with
Get-Help and examine a
cmdlet's parameters, next we look at the properties by piping the cmdlet
into Get-Member. Finally, we use the knowledge gained to create
PowerShell script to tackle a real-life task.
On this page I am making a change to my usual running order. Firstly I
want to tackle the challenge presented by a real-life task first.
Secondly, I will encourage you to research more methods and properties for
the cmdlet Get-Date. The result is that you have the skills to
undertake other DateTime projects.
Our challenge is simple enough, to knock-up a simple script which will
tell us how many days there are until Christmas, Thanksgiving, or any other date
you care to place in a text string.
Here in the UK, our operating systems show dates in the format: dd mmmm yyyy.
Whereas in the United States your locale is displayed as mmmm dd yyyy. Consequently, I was amazed that
PowerShell could convert both "25 December 2013" and "November 28 2013" into
date values that it could understand and perform calculations.
In example one I have used several variables that are not strictly
necessary, I just wanted to show
my thought process in creating this very simple PowerShell script.
# PowerShell DateTime Script to display days until Christmas $DecDate
= "25 December 2013" $NovDate ="November 28 2013" $Thanksgiving =
[system.datetime]$NovDate $Christmas = [system.datetime]$DecDate
$Today = Get-Date $Xmas = ($Christmas.DayOfYear - $Today.DayOfYear)
$Thanks = ($Thanksgiving.DayOfYear - $Today.DayOfYear) "There are " +
$Xmas + " days until " + $DecDate "There are " + $Thanks + " days
until " + $NovDate
Note 1: You may wish to examine the values for $DecDate
and $NovDate, then change the sequence of day month to suit
your locale.
Note 2: It's interesting to see how PowerShell leverages
.Net Framework, for example, it employs System.DateTime to convert a text
string to a date format.
Note 3: I keep marvelling how PowerShell can
understand both formats: dd mmmm yyyy, and mmmm dd yyyy.
Guy Recommends: A Free Trial of the Network Performance Monitor
(NPM)
SolarWinds'
Network Performance Monitor
will help you discover what's happening on your network. This
utility will also guide you through troubleshooting; the dashboard will
indicate whether the root cause is a broken link, faulty equipment or
resource overload.
What I like best is the way NPM suggests solutions to network
problems. Its also has the ability to monitor the health of individual VMware
virtual machines. If you are interested in troubleshooting, and creating
network maps, then I recommend that you try NPM now.
# PowerShell DateTime Example "There are " + (([system.datetime]"25
December 2013").DayOfYear -
` (Get-Date).DayOfYear) + " days until " + "24 December
2013"
Note 4: This is just one long command. Observe
how the backtick (`) enables the command to overspill onto the second
line.
Note 5: This command needed an extra set of
round brackets to surround [system.datetime]"25 December 2013"
Note 6: It's interesting to see how PowerShell
interprets a mixture of "text strings" and date calculations. As with types of
bracket, you need the correct type of "double" speech marks here.
Further Research on PowerShell's Get-Date
I'm hoping that the simple example above will give you ideas for date
scripts, which will be useful in your PowerShell projects. If so, then it's
well worth examining Get-Date's properties, and in particular its
methods.
a) Get-Date Methods and Properties
# Research PowerShell Get-Date Properties Get-Date | Get-Member
Note 7: Normally it's a cmdlet's properties that I am most interested in,
but with Get-Date it's the methods that intrigue me, for example
.AddDays()
and .IsDaylightSavingTime().
b) AddDays Method
The purpose of this script is to list all the System Error messages from
the last 8 days. Incidentally, it's amazing how often we use this method
with a negative number to go back in time.
# PowerShell Get-Date example Clear-Host $Log8d = @{ Logname
= 'System' EntryType = 'Error' After = (Get-Date).AddDays(-8) }
# Research PowerShell's Get-Date Parameters Clear-Host Get-Help
Get-Date
-full
Thanks toPowerShell's help, I learned about the format -Uformat.
d) Formatting Get-Date
Challenge: UK readers may appreciate employing
this -Uformat parameter to rearrange days and months:
# PowerShell Get-Date Format Example Clear-Host $Now = Get-Date
-Uformat "%A, %d:%m:%Y" Write-Host "Today in the UK is $Now enjoy
your day!"
SolarWinds Firewall Browser
Here is an utility where you can review firewall settings such as
access control lists (ACL), or troubleshoot problems with network
address translation (NAT).
Other reasons to download this SolarWinds Firewall Browser include
managing requests to change your firewall settings, testing firewall
rules before you go live, and querying settings with the browser's
powerful search options.
Once again, here is PowerShell working with the .Net Framework class
DateTime. ParseExact is a neat method which can convert a
text string into its DateTime equivalent.
# ParseExact Change date and time with custom specifier.
Clear-Host $DateString = "Sun 05 Aug 2012 12:30 AM -06:00" $Format
= "ddd dd MMM yyyy h:mm tt zzz" $Translate =
[DateTime]::ParseExact($DateString, $Format, $Provider) Write-Host
"$DateString converts to $($Translate.ToString())."
»
Get-Date CSV Format
Here is an example which employs another PowerShell cmdlet called
ConvertTo-Csv to control the date format.
Scripting dates is always tricky. In these examples we can see
how PowerShell leverages .Net Framework to convert strings into
PowerShell's DateTime
values, which in turn, can be use for calculations.
If you like this page then please share it with your friends
Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.
Windows Management Instrumentation (WMI) is
most useful for PowerShell scripting.
SolarWinds
have produced this
Free WMI Monitor to take the guess work out of which
WMI counters to use for applications like Microsoft Active Directory,
SQL or Exchange Server.