Humanizer helps you generate some nice output, but it’s kind of a pain to use in PowerShell. You can use Update-TypeData to make the syntax easier to work with. Then, your code starts to look more like the examples on the project’s site.
Here’s a simple example.
Add-Type -Path C:\Humanizer\Humanizer.dll
Update-TypeData -TypeName System.Int32 `
-MemberType ScriptProperty `
-MemberName ToWords `
-value {[Humanizer.NumberToWordsExtension]::ToWords($this)}
PS C:\temp> $int = 1234
PS C:\temp> $int.ToWords
one thousand two hundred and thirty-four
Keep in mind you can’t access the property of an number character directly. The type hasn’t been evaluated yet so you’ll see the following error. It works if you put the number in parenthesis or access a variable of an Int type.
PS C:\temp> 3.towords
The term '3.towords' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.At line:1 char:1
+ 3.towords
+ ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (3.towords:String) [], CommandNo
tFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS C:\temp> (3).towords
three
Here’s another. This time using a ScriptMethod.
Update-TypeData -TypeName System.String `
-MemberType ScriptMethod `
-MemberName ToQuantity `
-value { switch ($args.Count) {
1 { [Humanizer.ToQuantityExtensions]::ToQuantity($this, $args[0]) }
default { throw "No overload for ToQuantity takes the specified number of parameters." }
}}
PS C:\temp> "string".ToQuantity(4)
4 strings
Working with TimeSpans is much easier with a bit of setup.
Update-TypeData -TypeName System.Int32 -MemberType ScriptProperty -MemberName Hours -value {[Humanizer.NumberToTimeSpanExtensions]::Hours($this)}
Update-TypeData -TypeName System.Int32 -MemberType ScriptProperty -MemberName Minutes -value {[Humanizer.NumberToTimeSpanExtensions]::Minutes($this)}
Update-TypeData -TypeName System.Int32 -MemberType ScriptProperty -MemberName Days -value {[Humanizer.NumberToTimeSpanExtensions]::Days($this)}
Update-TypeData -TypeName System.Int32 -MemberType ScriptProperty -MemberName Weeks -value {[Humanizer.NumberToTimeSpanExtensions]::Weeks($this)}
#Now
Get-Date
Friday, April 11, 2014 1:45:11 PM
#Later
(Get-Date) + (2).Weeks + (1).Days
Saturday, April 26, 2014 1:45:11 PM
If you missed it, here are some more examples of what you can do with Humanizer.