【问题标题】:PowerShell DataSet -- array trimming and export to CSVPowerShell DataSet -- 数组修整并导出为 CSV
【发布时间】:2015-01-28 10:11:07
【问题描述】:

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

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

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

此外,输出拒绝使用| Export-Csv 编组为 CSV 文件

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

顺便说一句,$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

【问题讨论】:

    标签: powershell dataset export-to-csv


    【解决方案1】:

    我认为问题在于这一行:

    $adapter.Fill($dataset)

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

    [void] $adapter.Fill($dataset)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      相关资源
      最近更新 更多