I currently have the function below. I am trying to get an Invoke-Command to run as a Job so when it tries to create an SQL connection and insert the data it doesn’t hang up the rest of my Powershell form.
# Performs an ExecuteNonQuery command against the database connection. function ExecNonQuery { param ($cmdText) # Determine if parameters were correctly populated. if (!$cmdText) { # One or more parameters didn't contain values. write-Host "ExecNonQuery function called with no connection string and/or command text." } else { write-Host "Creating SQL Connection..." # Instantiate new SqlConnection object. $Connection = New-Object System.Data.SQLClient.SQLConnection # Set the SqlConnection object's connection string to the passed value. $Connection.ConnectionString = "server=Computer\SQLEXPRESS;database=GUI;trusted_connection=true;" # Perform database operations in try-catch-finally block since database operations often fail. if (Test-Connection "Computer" -Quiet) { try { write-Host "Opening SQL Connection..." # Open the connection to the database. $Connection.Open() write-Host "Creating SQL Command..." # Instantiate a SqlCommand object. $Command = New-Object System.Data.SQLClient.SQLCommand # Set the SqlCommand's connection to the SqlConnection object above. $Command.Connection = $Connection # Set the SqlCommand's command text to the query value passed in. $Command.CommandText = $cmdText write-Host "Executing SQL Command..." # Execute the command against the database without returning results (NonQuery). $Command.ExecuteNonQuery() } catch [System.Data.SqlClient.SqlException] { $_ | select -expandproperty invocationinfo | Format-List Line, PositionMessage -force write-host $_.Exception.ToString() -foregroundcolor "red" } catch { # An generic error occurred somewhere in the try area. write-Host "An error occurred while attempting to open the database connection and execute a command." } finally { # Determine if the connection was opened. if ($Connection.State -eq "Open") { write-Host "Closing Connection..." # Close the currently open connection. } } } } }
And in another function I am calling a foreach loop and trying to run the Invoke-Command.
$script:g = $e | select -Unique Name, AccountExpirationDate | Sort-Object -Property Name foreach ($xpusers in $g) { $xdate = $xpusers.AccountExpirationDate $cleanxdate = $xdate.ToString("M") $ExpiringAD.Items.Add($xpusers.Name + " - " + $cleanxdate) $sqlDate = (Get-Date $xdate -Format G) $xpusername = $xpusers.Name $sqlData = "INSERT INTO dbo.ExpiringAccounts Values (`'$xpusername`', `'$sqlDate`')" Invoke-Command -ScriptBlock {ExecNonQuery $args} -ArgumentList $sqlData -AsJob }
No matter if I hardcode the ArgumentList with the “INSERT INTO dbo.ExpiringAccounts Values (‘SAM’, ‘10/17/2017’)” I get
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.