PowerShell DataSet - 数组修剪并导出为CSV

时间:2015-01-28 10:11:08

标签: powershell dataset 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]
}

因此,基本上这个函数对数据库运行查询。但是,返回的值有这个令人厌烦的"返回的记录数"作为第一要素。例如:

> 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

但我仍然得到#34; 6"。

的第一项令人讨厌的东西

此外,输出拒绝使用| Export-Csv

编组到CSV文件中

如何截断/删除第一项?如何将剩余数据编组到CSV文件中?

BTW,$PSVersionTable返回:

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

1 个答案:

答案 0 :(得分:1)

我认为问题在于这一行:

$ adapter.Fill($数据集)

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

[void] $ adapter.Fill($ dataset)

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