首页 > 解决方案 > 如何将 System.Data.DataSet 对象作为参数传递给 Powershell 工作流?

问题描述

我从 SQL 表中获取一些数据,然后将其存储在一个System.Data.DataSet对象中。我想将此 DataSet 中的这些数据作为 Argument/Parameter 传递给 a workflow,以便我可以以某种foreach -parallel样式显示此 DataSet 中的所有数据。但是我不知道将数据从System.Data.DataSet对象传递到workflow. 目前我在“ param([System.Data.DataSet]$pServiceDataSet) ”行附近出现错误,如下所示。

在此处输入图像描述

Function GetSQLData
{
    param ($TargetDBServer, $TargetDB, $SQLQuery)
    
    # SQL Connection Object
    $sqlConn = New-Object System.Data.SqlClient.SqlConnection
    $sqlConn.ConnectionString = "Server=$TargetDBServer;Database=$TargetDB;User Id=SomeUser;Password=SomePassword;"
    $sqlConn.Open()
    
    # SQL Command
    $sqlcmd = New-Object System.Data.SqlClient.SqlCommand
    $sqlcmd.Connection = $sqlConn
    $sqlcmd.CommandText = $SQLQuery
    
    # SQL Adapter
    $sqlAdp = New-Object System.Data.SqlClient.SqlDataAdapter ($sqlcmd)
    
    # SQL DataSet
    $ResultDataSet = New-Object System.Data.DataSet
    $sqlAdp.Fill($ResultDataSet) | Out-Null
    $sqlConn.Close()
    
    return $ResultDataSet.Tables[0]
}

$CurrentComputerName = $env:COMPUTERNAME

# Export the Windows Services & it's config parameters from the "DatabaseABC..WindowsServicesConfig" Table.
$SQLQueryForService = "
SELECT [ServiceName], [StartUpParameter], [DBServerName], [DBName]
FROM [dbo].[WindowsServicesConfig] WITH (NOLOCK)
WHERE [HostServerName] = '$CurrentComputerName'
      AND [ServiceName] LIKE '%MyService%' "
$ServicesDataSet = GetSQLData -TargetDBServer "ServerABC" -TargetDB "DatabaseABC" -SQLQuery $SQLQueryForService

$ServicesDataSet.GetType()
$ServicesDataSet | Format-Table

workflow DisplayAllServices
{
    param([System.Data.DataSet]$pServiceDataSet)    # <- I get an Error here
    
    foreach -parallel ($Service in $pServiceDataSet)
    {
        $Service.ServiceName
        $Service.StartUpParameter
        $Service.DBServerName
        $Service.DBName
    }
}

DisplayAllServices -pServiceDataSet $ServicesDataSet

我的最终目标是使用此 DataSet 中的数据来创建 Windows 服务。但这是我最沮丧的障碍。我无法克服错误。

标签: powershell

解决方案


想出了我的问题的解决方案。将“param([System.Data.DataSet]$pServiceDataSet)”替换为“param([PSObject]$pServiceDataSet)”。


推荐阅读