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]
我在从这个函数中提取值时遇到了一些问题:
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
如何 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]