PowerShell 数据集——数组修整和导出到 CSV

PowerShell DataSet -- array trimming and export to CSV

我在从这个函数中提取值时遇到了一些问题:

function Get-DatabaseData {
    [CmdletBinding()]
    param (
        [string]$connectionString,
        [string]$query,
        [switch]$isSQLServer
    )
    if ($isSQLServer) {
        Write-Verbose 'in SQL Server mode'
        $connection = New-Object -TypeName System.Data.SqlClient.SqlConnection
    } else {
        Write-Verbose 'in OleDB mode'
        $connection = New-Object -TypeName System.Data.OleDb.OleDbConnection
    }
    $connection.ConnectionString = $connectionString
    $command = $connection.CreateCommand()
    $command.CommandText = $query
    if ($isSQLServer) {
        $adapter = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter $command
    } else {
        $adapter = New-Object -TypeName System.Data.OleDb.OleDbDataAdapter $command
    }
    $dataset = New-Object -TypeName System.Data.DataSet
    $adapter.Fill($dataset)
    return $dataset.Tables[0]
}

所以,基本上这个函数对数据库运行查询。但是,返回值的第一个元素是这个令人厌烦的 "number of records returned" 。示例:

> Get-DatabaseData -connectionString $myConnString -isSQLServer -query $myQuery_PlanCache
6

CacheType                 : Prepared
Total Plans               : 118
Total MBs                 : 10,406250
Avg Use Count             : 41
Total MBs - USE Count 1   : 3,343750
Total Plans - USE Count 1 : 33

CacheType                 : Proc
Total Plans               : 53
Total MBs                 : 8,015625
Avg Use Count             : 118
Total MBs - USE Count 1   : 2,617187
Total Plans - USE Count 1 : 10

-- additional records snipped --

我尝试用以下内容替换 return $dataset.Tables[0]

    $dbdata = @($dataset.Tables[0])
    $dbdata = $dbdata[1..($dbdata.Length-1)]
    return $dbdata

但我仍然得到“6”的令人讨厌的第一项。

此外,使用 | Export-Csv

拒绝将输出编组为 CSV 文件

如何 truncate/remove 第一项?以及如何将剩余数据编组为 CSV 文件?

顺便说一句,$PSVersionTable returns:

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

我认为问题出在这一行:

$adapter.Fill($数据集)

其中 returns 提供给方法的项目数。尝试将其更改为:

[无效]$adapter.Fill($数据集)

因此 Get-DatabaseData 的呼叫者收到该号码(即 6)+ $dataset.Tables[0]