将对象传递给PowerShell函数

本文关键字:PowerShell 函数 对象 | 更新日期: 2023-09-27 18:27:54

我正试图将SQL适配器对象传递给PowerShell函数,但收到以下错误:

executeQueryAndFillTable:无法处理上的参数转换参数"da"。无法将";System.Object[]";类型的值"System.Object[]";以键入";System.Data.SqlClient.SqlDataAdapter";。

这是代码

function sql_pull
{
    # define Objects
    $xmlDoc = New-Object System.Xml.XmlDocument
    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $sqlCommand = New-Object System.Data.SqlClient.SqlCommand
    $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $connectionString = "Password=$password;Persist Security Info=True;User ID=$userId;Data Source=$dataSource"
    $counter = 0
    # database queries 
    $queries = @(
    "Select * from sys.configurations for xml Raw ('Cretiria'), type, ROOT('sys.configurations'), ELEMENTS");
    $sqlConnection.ConnectionString = $connectionString
    $sqlCommand.Connection = $sqlConnection
    try {
        $sqlConnection.Open()
        
        foreach($q in $queries) 
        {
            $sqlCommand.CommandText = $q
            $sqlAdapter.SelectCommand = $sqlCommand.CommandText
            $sqlAdapter.SelectCommand.CommandTimeout = 300
            $res = executeQueryAndFillTable($sqlAdapter, $sqlCommand)              
        }
        $sqlConnection.Dispose()
        $sqlCommand.Dispose()
        $sqlAdapter.Dispose()
    } 
    catch
    {
        Throw
    }    
}
function executeQueryAndFillTable
{
    param(
        [System.Data.SqlClient.SqlDataAdapter]$da,
        [System.Data.SqlClient.SqlCommand] $command
    )
    $dataTable = New-Object System.Data.DataTable
    $da.SelectCommand = $command
    $da.Fill($dataTable)
    #check
    $data = $dataTable.Rows[0][0]
    return $data
}

将对象传递给PowerShell函数

两件事:

第一个:在PowerShell中,函数应在使用前声明。

:函数的调用方式。

executeQueryAndFillTable($sqlAdapter, $sqlCommand)

这不是在PowerShell中调用函数的正确方式。如果你这样调用它,PowerShell认为你只使用一个参数来调用函数,该参数是两个不同类型元素的数组(非常重要的,是PowerShell中的数组运算符)(错误中System.Object[]的原因)。

正确的方法是:

executeQueryAndFillTable $sqlAdapter $sqlCommand