Iterate your CmdLet Powershell parameters to build a SQL Query

When developing some Powershell scripts to update an Oracle database (you can use the same technique for SQL server) I decided it would be nice to use the pipeline to join the scripts together and build the SQL queries using the script parameters.

Technique 1: Iterate through the cmdlet parameters

$parameterList = (Get-Command -Name $MyInvocation.InvocationName).Parameters
foreach($key in $parameterList.Keys)
{
	$param = Get-Variable -Name $key -ErrorAction SilentlyContinue	
	if($param)
	{
		if(! [string]::IsNullOrWhiteSpace($param.Value))
		{
			Write-Verbose "Key: $key Value: $($param.Value)"
		}
	}
}

Technique 2: Use StringBuilder to build the SQL query string

$queryBuilder = New-Object System.Text.StringBuilder
# We set 1=1 so that all additions to the query can be AND
# We assign to $null so we don't pollute the pipeline
$null = $queryBuilder.Append("SELECT * FROM Org WHERE 1=1") 
 
# append each of our parameters
$null = $queryBuilder.Append(" AND Column1='Value1'")
# Get the query string
$adQuery = $queryBuilder.ToString()

Techniques combined:

$queryBuilder = New-Object System.Text.StringBuilder
# We set 1=1 so that all additions to the query can be AND
# We assign to $null so we don't pollute the pipeline
$null = $queryBuilder.Append("SELECT * FROM Org WHERE 1=1") 
 
# append each of our parameters
$parameterList = (Get-Command -Name $MyInvocation.InvocationName).Parameters
foreach($key in $parameterList.Keys)
{
	$param = Get-Variable -Name $key -ErrorAction SilentlyContinue	
	if($param)
	{
		if(! [string]::IsNullOrWhiteSpace($param.Value))
		{
			$null = $queryBuilder.Append(" AND $key='$($param.value)'") 
		}
	}
}
$sqlQuery = $queryBuilder.ToString()