gpt4 book ai didi

powershell - 如何从PowerShell函数即DataTable返回特定的数据类型

转载 作者:行者123 更新时间:2023-12-02 22:10:45 33 4
gpt4 key购买 nike

我一直在尝试编写一个实用程序函数,该函数将返回初始化的[System.Data.DataTable]对象数据类型。

我知道烦人的PowerShell函数会返回行为行为,它会尝试将所有内容“展开”为[System.Array]返回类型。
以前,我一直设法解决这个问题。
通常使用“逗号把戏”返回您自己的数组@(,$result),但没有成功-但这一次似乎没有什么不同,我已经用光了所有的选项...

我通常使用的另一个技巧是Process块中的$null分配(请参见下面的代码)-这样,我就愚弄了管道,没有什么可在输出上“展开”了。

我并不是没有答案的可能,到目前为止,根据我的经验,在PowerShell中没有什么是不可能的:)

这是我的代码:

function Get-SourceDataTable 
{
[OutputType([System.Data.DataTable])]
[cmdletbinding()]
param(
[parameter(Mandatory=$true, Position=0)]
[System.Data.SqlClient.SqlBulkCopy] $Destination,
[parameter(Mandatory=$true, Position=1)]
[System.Collections.Specialized.OrderedDictionary] $ColumnDefinition,
[parameter(Mandatory=$false, Position=2)]
[int]$ColumnStartIndex = 0
)
BEGIN{
$datatable = New-Object System.Data.DataTable
$colIndex = $ColumnStartIndex
}
PROCESS{
$ColumnDefinition.Keys |
foreach {
$null = $datatable.Columns.Add($_, $ColumnDefinition[$_]) # define each column name and data type
$null = $Destination.ColumnMappings.Add($_, $colIndex) # map column to destination table
$colIndex++
}
}
END{
return ,$datatable
}
}

我希望有人可以使此代码正常工作...

最佳答案

不要使用return而不是Write-Output -NoEnumerate。例如:

function New-DataTable {
$datatable = New-Object System.Data.DataTable
$null = $datatable.Columns.Add("x",[int])
$null = $datatable.Columns.Add("y",[int])
$null = $datatable.Rows.Add(@(1,2))
$null = $dataTable.Rows.Add(@(3,4))
Write-Output -NoEnumerate $datatable
}

New-DataTable | Get-Member

但是请注意,如果您只键入 New-DataTable,则它看起来像是已编号的行,但是 Get-Member会告诉您返回的实际类型。

关于powershell - 如何从PowerShell函数即DataTable返回特定的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39495766/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com