I recently received a question on Reddit that asked if it is possible to use a csv file to create a hash table that can be used for splatting parameters into a function. The goal of this exercise is to be able to specify a csv file and to pass on the proper arguments to a function.
For example there is a csv file with the following contents:
Image may be NSFW.
Clik here to view.
So based on this the New-Server function should be called as such:
1 | New-Server -Templare 2012R2 -Spec DomainJoinSpec -Datastore Production2 -Cpus 1 |
In order to achieve this, the first step would be to remove the empty fields from the equasion as such:
1 2 | $Csv = Import-Csv -Path Parameters.csv $Csv.psobject.Properties | Where-Object {$_.Value} |
This will import the csv and only display the colums in the csv that actually contain data. To ensure this data is stored in a hash table we can use the ForEach-Object. This cmdlet can be used to loop through the remaining results and to create a hashtable:
1 2 3 4 5 6 | $Csv = Import-Csv c:\temp\params.csv $Csv.psobject.Properties | Where-Object {$_.Value} | ForEach-Object -Begin { $SplatParams = @{} } -Process { $SplatParams[$_.Name] = $_.Value } |
Now that the hash table has been created this can be used for splatting into the New-Server function:
1 | New-Server @SplatParams |
By combining the ForEach-Object cmdlet and the PSObject property that is piped into Where-Object it is possible to construct a custom hashtable that can be used for splatting. This can provide an easy alternative for non-technical users to provide parameters and arguments into a PowerShell function.
Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view.Share