PowerShell-Technique: Splatting

Created March 24, 2023

How Splatting in PowerShell Can Improve Your Code's Aesthetics and Reduce Volume

Have you ever found yourself struggling with long, unwieldy PowerShell commands? You're not alone. Backticking can be a tempting solution, but it can also make your code harder to read and maintain.

Splatting is a technique that uses a hash table to pass a set of parameters to a command. Instead of passing each parameter as a separate argument, you can pass a hash table with the parameter names and values, and then use the splatting operator (@) to expand the hash table as arguments to the command. Here are some benefits of splatting in PowerShell:

Aesthetics

Splatting can make your code more aesthetically pleasing by separating the parameter values from the command. Compare the following long command:

New-ADUser -Name "Clark.Kent" -Accountpassword (Read-Host -AsSecureString "I4mSuP3rMan!") -Enabled $true -EmailAddress "Clark.Kent@NotSuperman.com" -ChangePasswordAtLogon $True -EmployeeID "1337" -Department "Journalist" -DisplayName "Clark Kent" -Name "Clark" -SurName "Kent" -City "Metropolis"

To the same command written with backticks:

New-ADUser -Name "Clark.Kent" -Accountpassword (Read-Host -AsSecureString "I4mSuP3rMan!")`
-Enabled $true -EmailAddress "Clark.Kent@NotSuperman.com" -ChangePasswordAtLogon $True`
-EmployeeID "1337" -Department "Journalism" -DisplayName "Clark Kent"`
-Name "Clark" -SurName "Kent" -City "Metropolis"

The backticks make the code harder to read and can cause errors if they are not used correctly. On the other hand, splatting allows you to define your parameters in a hash table, which can be modified or reused as needed, and can make your code more flexible and modular.

Code Volume

Splatting can also reduce the volume of your code. In the above example, the command with backticks is shorter than the long command, but it's still not very readable. However, the same command with splatting is even shorter and easier to read:

$ParamsNewADUser = @{
    Name                    = "Clark.Kent"
    AccountPassword         = $(Read-Host -AsSecureString "I4mSuP3rMan!")
    Enabled                 = $True
    EmailAddress            = "Clark.Kent@NotSuperman.com"
    ChangePasswordAtLogon   = $True
    EmployeeID              = "1337" 
    Department              = "Journalism"
    Displayname             = "Clark Kent"
    Name                    = "Clark"
    SurName                 = "Kent"
    City                    = "Metropolis"
}
New-ADUser @ParamsNewADUser
Reusability and Testing

Another benefit of splatting is that you can reuse the hash table ($ParamsNewADUser in the above example) and modify its values as needed.

    $ParamsNewADUser.Name = "Kent.Clark"

This makes your code more maintainable and can help you avoid repeating yourself. Splatting can also help with testing because it allows you to define and modify your parameters in a hash table, which can be easily tested and verified in isolation from the command.

In summary, splatting is a powerful technique in PowerShell that can make your code more readable, flexible, maintainable, and testable.

Thats all for now.

If you have any thoughts or feedback on this topic, feel free to share them with me on Twitter at Christian Ritter. Best regards,

Christian.