简体   繁体   English

如何将 System.Data.DataSet 对象作为参数传递给 Powershell 工作流?

[英]How to Pass a System.Data.DataSet Object as an Argument to a Powershell Workflow?

I'm getting some data from a SQL table, which I then store in a System.Data.DataSet object.我从 SQL 表中获取一些数据,然后将其存储在System.Data.DataSet对象中。 I want to pass this data in this DataSet, as an Argument/Parameter, to a workflow , such that I can display all the data in this DataSet in a foreach -parallel style.我想将此数据集中的数据作为参数/参数传递给workflow ,以便我可以以foreach -parallel样式显示此数据集中的所有数据。 But I'm at a loss for the correct syntax of passing data from a System.Data.DataSet object to a workflow .但是我对将数据从System.Data.DataSet对象传递到workflow的正确语法感到茫然。 Currently I get an Error near the line " param([System.Data.DataSet]$pServiceDataSet) " as shown below.目前我在“ 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

My final objective is to use the data in this DataSet to create Windows Services.我的最终目标是使用此 DataSet 中的数据来创建 Windows 服务。 But this is my most frustrating hurdle.但这是我最令人沮丧的障碍。 I cannot get past the Error.我无法克服错误。

Figured out the Solution to my Problem.找出我的问题的解决方案。 Replaced the "param([System.Data.DataSet]$pServiceDataSet)" with "param([PSObject]$pServiceDataSet)".将“param([System.Data.DataSet]$pServiceDataSet)”替换为“param([PSObject]$pServiceDataSet)”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM