PowerShell with a Purpose Blog

Splat Me

I've recently become a big fan of splatting, which sounds awful until I explain it.

In PowerShell, it's obviously very common to have parameters for your commands:

Get-EventLog -logName Security -newest 10

For longer commands, though, stacking up all of those parameters can be daunting - and make a script file pretty difficult to read. Look at the help for New-ADUser, for example, and imagine typing that command out, with all of its parameters - pretty big hunk of text.

Splatting offers an alternative. You create a hashtable that uses parameter names for keys, and parameter input for values. The way PowerShell parses these constructs means you can format them quite neatly within a script. When you're done, you just feed the hashtable (which you'll usually store in a variable) to the cmdlet:

$params = @{'logName'='Security';
Get-EventLog @params

You need to be sensitive to punctuation, here:
  • The first use of params is preceded by a dollar sign, indicating that we want to access a variable with the name "params"
  • The second use of params DOES NOT have a dollar sign. Instead, it uses the @ splat operator to expand the contents of the variable.
A neat trick: You can mix and match, using splatted parameters in addition to normal ones, all with the same command.

This isn't a technique I use at the command-line much, but I'm using it more and more in scripts, because it makes script files a bit easier to read. I can nicely format all of the parameters in a hashtable, and then feed them to a command. It helps avoid line-wrapping and horizontal scrolling, both of which make a script harder to read and follow.
Hide comments


  • Allowed HTML tags: <em> <strong> <blockquote> <br> <p>

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.