我在从此功能中提取值时出现问题:
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文件中?
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
答案 0 :(得分:1)
我认为问题在于这一行:
$ adapter.Fill($数据集)
返回提供给方法的项目数。尝试将其更改为:
[void] $ adapter.Fill($ dataset)
因此Get-DatabaseData
的来电者会收到该号码(即6)+ $dataset.Tables[0]