Как вернуть объект .Net в Powershell?

Я пытаюсь написать библиотечную функцию Powershell для возврата объекта SQL BulkCopy, который затем можно использовать в различных сценариях.

Вот моя функция до сих пор:

Function CreateBulkCopyObjectWithTransaction
{
Param
    (
    [System.Data.SqlClient.SqlConnection] $sqlConnection
,   [System.Data.SqlClient.SqlTransaction] $sqlTransaction
,   [string] $destinationTable
,   $dataTable
    )

$bulkCopy = New-Object System.Data.SqlClient.SqlBulkCopy($sqlConnection,[System.Data.SqlClient.SqlBulkCopyOptions]::Default,$sqlTransaction);
$bulkCopy.DestinationTableName = $destinationTable;
foreach ($dataColumn in $dataTable.Columns) 
{
    $bulkCopy.ColumnMappings.Add($dataColumn.ColumnName, $dataColumn.ColumnName)
}
return $bulkCopy;
}

А вот пример использования:

$dataTable = $eventLogs | OutputToDataTable; #OutputToDataTable is another custom function and works perfectly

$sqlConnection = New-Object System.Data.SqlClient.SqlConnection($connectionString);
$sqlConnection.Open();

$sqlTransaction = $sqlConnection.BeginTransaction();

$bulkCopy = CreateBulkCopyObjectWithTransaction -sqlConnection $sqlConnection -sqlTransaction $sqlTransaction -destinationTable $destinationTable -dataTable $dataTable;

Try
{
$bulkCopy.WriteToServer($dataTable);
$sqlTransaction.Commit();
}
Catch
{
$sqlTransaction.Rollback();
Write-Host ("Error - " + $_.Exception.Message);
}

$sqlConnection.Close();

Моя проблема заключается в том, что функция CreateBulkCopyObjectWithTransaction не возвращает объект SQLBulkCopy, как мне хотелось бы, поскольку я получаю сообщение об ошибке:

Вызов метода завершился неудачно, так как [System.Object[]] не содержит метод с именем "WriteToServer".

Я просмотрел различные сообщения, в том числе этот здесь о неожиданных объектах, все еще находящихся в конвейер, но не вижу, что это проблема, так как все имеет назначение.

ИЗМЕНИТЬ:

Кроме того, этот пост здесь, предложенный Ансгаром, не отвечает на мой вопрос как это относится к попытке вызвать метод в массиве. Я пытаюсь вернуть тип .Net и вызвать для него метод.


person The Dumb Radish    schedule 17.03.2016    source источник
comment
Я не вижу никакого назначения в этой строке: $bulkCopy.ColumnMappings.Add($dataColumn.ColumnName, $dataColumn.ColumnName).   -  person user4003407    schedule 17.03.2016
comment
Как проверить, не в нем ли дело? Я добавил строку $bulkCopy.ColumnMappings | Out-Null; но все равно получаю ту же ошибку. И я хочу вернуть объект $bulkCopy со всеми его свойствами. Спасибо.   -  person The Dumb Radish    schedule 17.03.2016
comment
Ок разобрались. @PetSerAl поставил меня в правильное русло. Я добавил Out-Null в конец строки, которую он упомянул, и это решило проблему. Спасибо.   -  person The Dumb Radish    schedule 17.03.2016