从脚本端设置时,Powershell C# Commandlet 无法获取 DataTable
Powershell C# Commandlet not able to get DataTable when set from script side
关于从 Powershell
脚本 Commandlet
到 C#
设置的 DataTable
的用法,我遇到了一个奇怪的问题。我不知道为什么一个正确构造的 DataTable
被推送为一系列 DataTableRow
作为数据而不是完全打包 DataTable
。这阻碍了我进一步处理任何事情。下面是 C# commandlet
.
[Cmdlet(VerbsCommon.Set, "LinkParameter")]
public class SetLinkParameter : PSCmdlet
{
[Parameter(Position = 0)]
public string ParameterName { get; set; }
[Parameter(Position = 1, Mandatory = true, ValueFromPipeline = false)]
public object ParameterValue { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
var setParameterValue = ParameterValue
// This never comes in proper DataTable format rather than appears as System.Data.DataRow System.Data.DataRow System.Data.DataRow
.............
............
}
System.Data.Row
以上将等于数据 table 中包含的数据行数。我不能将 DataTable
作为参数类型,因为我还必须设置所有标准数据类型值以及 DataTable
。
下面是Powershell
脚本。
$table = New-Object system.Data.DataTable
$col1 = $table.Columns.Add( "Col1", [string])
$col2 = $table.Columns.Add( "Col2", [int])
$table.Rows.Add( "bar", 0 )
$table.Rows.Add( "beer", 1 )
$table.Rows.Add( "baz", 2 )
Set-LinkParameter "CreatedData" $table
Set-LinkParameter "SetTestMessage" "testMessage" // can also be set.
如何解决这个问题?
正如 mklement0 在评论中指出的那样。我们可以访问 PSObject 内部 BaseObject 并且所有东西都将被包含在内。
关于从 Powershell
脚本 Commandlet
到 C#
设置的 DataTable
的用法,我遇到了一个奇怪的问题。我不知道为什么一个正确构造的 DataTable
被推送为一系列 DataTableRow
作为数据而不是完全打包 DataTable
。这阻碍了我进一步处理任何事情。下面是 C# commandlet
.
[Cmdlet(VerbsCommon.Set, "LinkParameter")]
public class SetLinkParameter : PSCmdlet
{
[Parameter(Position = 0)]
public string ParameterName { get; set; }
[Parameter(Position = 1, Mandatory = true, ValueFromPipeline = false)]
public object ParameterValue { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
var setParameterValue = ParameterValue
// This never comes in proper DataTable format rather than appears as System.Data.DataRow System.Data.DataRow System.Data.DataRow
.............
............
}
System.Data.Row
以上将等于数据 table 中包含的数据行数。我不能将 DataTable
作为参数类型,因为我还必须设置所有标准数据类型值以及 DataTable
。
下面是Powershell
脚本。
$table = New-Object system.Data.DataTable
$col1 = $table.Columns.Add( "Col1", [string])
$col2 = $table.Columns.Add( "Col2", [int])
$table.Rows.Add( "bar", 0 )
$table.Rows.Add( "beer", 1 )
$table.Rows.Add( "baz", 2 )
Set-LinkParameter "CreatedData" $table
Set-LinkParameter "SetTestMessage" "testMessage" // can also be set.
如何解决这个问题?
正如 mklement0 在评论中指出的那样。我们可以访问 PSObject 内部 BaseObject 并且所有东西都将被包含在内。