Я работаю над сценарием, который много раз требует нескольких соединений sql. Мне нужен параллелизм, чтобы ускорить все. Вот почему я хотел бы иметь фабрику SQL, которая возвращает мне дескриптор соединения. Но почему-то мой код не работает. Что я здесь делаю неправильно?PowerShell пытается закодировать фабрику SQL ...
$m = New-Module -Name sql_factory -AsCustomObject -ScriptBlock {
Function new_session {
$db_host = 'my.sqlhost.tld';
$db_user = 'user';
$db_pass = 'pass';
$db_name = 'db';
$table_name = $env:COMPUTERNAME;
$conn = New-Object system.data.sqlclient.sqlconnection;
$conn.ConnectionString = "Server=${db_host};Database=${db_name};User ID=${db_user};Password=${db_pass};";
$cmd = New-Object System.Data.SqlClient.SqlCommand;
$cmd.connection = $conn;
return $cmd, $conn;
}
}
$test = {
$cmd, $conn = $m.new_session();
$conn.Open();
$cmd.CommandText = "INSERT INTO tableXXX (date, time, action, protocol, src_ip, dst_ip, src_port, dst_port, size, tcp_flags, tcpsyn, tcpack, tcpwin, icmptype, icmpcode, info, path) VALUES ('xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx')";
$cmd.ExecuteNonQuery();
$conn.Close();
}
start-job -ScriptBlock $test | Out-Null
get-job | receive-job -AutoRemoveJob -Wait
Это сообщение об ошибке я получаю ...
You cannot call a method on a null-valued expression.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
+ PSComputerName : localhost
You cannot call a method on a null-valued expression.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
+ PSComputerName : localhost
Property 'CommandText' cannot be found on this object; make sure it exists and is settable.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
+ PSComputerName : localhost
You cannot call a method on a null-valued expression.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
+ PSComputerName : localhost
You cannot call a method on a null-valued expression.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
+ PSComputerName : localhost
Спасибо за ваш ответ. Я не хочу помещать код для установки в «Start-Job -ScriptBlock», потому что это будет очень повторительно. У меня есть несколько вставных элементов, которые запускаются параллельно с запуском-заданием, но у меня также есть несколько других соединений, которые настраивают свойства базы данных и таблицы ... – Matze
Ваш код не менее повторяющийся. Это немного сложнее. –