如何在Powershell中返回.Net对象?

时间:2016-03-17 11:44:24

标签: powershell powershell-v2.0 sqlclient

我正在尝试编写一个库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'

的方法。

我已经审核了各种帖子,包括关于意外对象仍然在管道中的here,但由于所有内容都有分配,因此无法看到这是问题。

修改

另外,Ansgar建议的这篇帖子here没有解决我的问题,因为它涉及尝试在数组上调用方法。我正在尝试返回.Net类型并在其上调用方法。

0 个答案:

没有答案