代码之家  ›  专栏  ›  技术社区  ›  Usman

将数据(datatable)从PowerShell管道传输到commandlet c#

  •  0
  • Usman  · 技术社区  · 8 年前

    我想将数据表从PowerShell管道传输到基于C的commandlet。目前,它遍历整个数据表,只传输一个完全不好的数据行。我希望将完整的数据表从PowerShell管道传输到commandlet参数。

    下面是我的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 get的值在那里,但它根本不是数据表。这将成为数据行或单个数据行的集合。也许pipeline执行集合并简单地枚举。 如何阻止这种情况?我希望在接收端有一个完整的数据表,而不是数据行或单个数据行。另一方面 我想通过管道方式设置它。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Usman    8 年前

        2
  •  0
  •   Mike Twc    7 年前

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