【问题标题】:Transferring data ( DataTable) from powershell pipeline to Commandlet C#将数据(DataTable)从 powershell 管道传输到 Commandlet C#
【发布时间】:2018-12-19 03:51:45
【问题描述】:

我想将 DataTable 从 Powershell Pipeline 传输到基于 C# 的命令行开关。目前,它遍历整个数据表并仅传输单个 DataRow,这完全是错误的。我希望将完整的数据表从 PowerShell 管道传输到命令行参数。

以下是我的 C# commandlet 代码,其中参数“ParameterValue”需要一个完整的数据表。

[Cmdlet(VerbsCommon.Set, "LinkParameter")]  
public class SetLinkParameter : PSCmdlet
{
    [Parameter(Position = 0, Mandatory = true)]
    public string ParameterName { get; set; }

    [Parameter(ValueFromPipeline = true, Position = 1)] // The data or dataTable appear in this variable
    public PSObject ParameterValue { get; set; }
}

以下是我正在执行的脚本。

$table = New-Object system.Data.DataTable 'DataTable'

$newcol = New-Object system.Data.DataColumn ColumnStringA,([string]); $table.columns.add($newcol)
$newcol = New-Object system.Data.DataColumn ColumnStringB,([string]); $table.columns.add($newcol)
$newcol = New-Object system.Data.DataColumn ColumnLongC,([long]); $table.columns.add($newcol)


$row = $table.NewRow()
$row.ColumnStringA = ("ColumnStringA")
$row.ColumnStringB = ("ColumnStringB")
$row.ColumnLongC =  45781547

$table.Rows.Add($row) 

$table| Set-LinkParameter 

虽然上面的 Set-LinkParameter 命令执行并且 ParameterValue 在那里获取它的值,但它根本不是数据表。这将成为 DataRow 或单个 DataRow 的集合。也许管道执行集合并简单地枚举。 这怎么能阻止?我想要一个完整的数据表在接收端,而不是数据行或单个数据行。另一方面我希望它通过管道方式设置。

【问题讨论】:

标签: c# powershell pipeline cmdlets


【解决方案1】:

正如 PetSerAI 和 iRon 提到的那样。我们可以使用这两种技术。 Write-Output -NoEnumerate 或 put ,在传递到管道之前的 dataTable 变量之前。它不会枚举和传递单独的行,而是会集体传递整个集合。

【讨论】:

    【解决方案2】:

    您还可以从该单个数据行获取对数据的引用:

    if($dt.GetType().Name -eq "DataRow"){$dt = $dt.Table }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-23
      • 2020-04-04
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多