I have a ton of Powershell code I’ve written over the last 6 years or so that I’m in the process of cleaning up and looking to share. I plan on re-presenting them as a set of scripts and script modules I’ll be featuring in a series of blog posts coming in the near future.
I’ll start simply. I have a new script module called bsti.conversion that has a single function: ConvertTo-TimeSpan
I always thought it was neat that you could type in 1kb and Powershell would convert that value to 1024. You can also use mb (megabytes), tb (terabytes), and pb (petabytes). I don’t see that eb (exabytes) works. In any case, I always wished I could do the same with time units like this:
12m (minutes) or 24h (hours) or 7d (days)
The ConvertTo-TimeSpan function I’ve included in this module does just that.
What I use this for is I have functions and scripts I like to write that require the user to pass in an easy time unit value.
This functionality can also be achieved by Timespan conversion like so:
[Timespan](“1.00:00:00”) # 1 day
[Timespan](“1.6:00:00”) # 1 day, 6 hours
[Timespan](“1:22:00”) # 1 hour, 22 minutes
The conversion function is a little less precise, but a bit more human-readable, which is important to me since most of my users are not .NET programmers and don’t understand the format of a timespan object right offhand.
The function in this module supports both formats:
The module files can be downloaded here.
Once downloaded, extract the folder to the C:\windows\system32\windowspowershell\v1.0\modules directory. The final structure should look like this:
C:\windows\system32\windowspowershell\v1.0\modules\bsti.conversion
Then just use the Import-Module bsti.conversion command as shown above.
Not bad for a start, hope you enjoy.
UPDATE: I’m adding my stuff to GitHub. Bear with me while I come up-to-speed on how to use it. Find this module project here:
https://github.com/Roadkill4545/bsti.Powershell/tree/master/bsti.conversion
Hi,
TimeSpan can do something similar out of the box by using one of its static FromTIMEUNIT methods. E.g. [TimeSpan]::FromHours(32).
LikeLike
Absolutely, thanks for the comment. There are several scenarios where that works out wonderfully. The reason I wrote the function is I have several scenarios where it makes providing input much easier. If you are passing a TimeSpan value into a script, you need to provide the user an easy way to represent the value they want. In the days of yore, I used to make parameters like -DaysPast, where you would provide an integer representing how many days back you wanted to go. I’d use the function you listed above to turn that into a timespan, or simply: New-TimeSpan -Days 4 or some similar value. However, that’s kind of imprecise. What if you want 1.5 days? 12 hours?
It’s much more flexible to provide an option to let the user specify a precise value. “12h” or “12:00:00” for instance. Further, this makes a difference when the input has to be read from a text or xml configuration file, which I do often for my more complex processes.
DaysBack=12h
or
<Daysback>12.00:00:00</DaysBack>
LikeLike
Hi Brandon,
thanks a lot for expanding on the topic, it makes sense to me that way. Did you have a look at https://github.com/dfinke/PowerShellHumanizer? It is based on a similar concept.
Kind regards,
Dirk
LikeLike
Pretty amazing from what I can see so far. I look forward to looking it over more thoroughly. Thanks so much for sharing!
LikeLike