我想從我製作的SQL查詢中創建一個CSV文件(如果可能,不帶標頭)。我的powershell在下面。它讀取數據庫沒有問題,我看到行結果從printint返回到標準輸出。但我似乎無法弄清楚如何將結果導入CSV文件。試圖從SQL查詢中寫入數據集到Powershell中的CSV文件
從我的PowerShell中創建的TXT文件只有一行是:
TYPE System.Int32
這似乎對我來說,它只是outputing數據類型或東西。看起來很奇怪,它是In32,但也許這是因爲它是一個指向對象的指針?
我看到一篇文章使用數據集時使用表[0],但當我用 替換最後一行時$ QueryResults.Tables [0] | export-csv c:\ tests.txt 它給了我一個錯誤,說它無法將參數綁定到參數,因爲它是空的。
function Get-DatabaseData {
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)
$dataset.Tables[0]
}
$QueryResults = Get-DatabaseData -verbose -connectionString 'Server=localhost\SQLEXPRESS;;uid=sa; pwd=Mypwd;Database=DanTest;Integrated Security=False;' -isSQLServer -query "SELECT * FROM Computers"
foreach($MyRow in $QueryResults) {
write-output $MyRow.computer
write-output $MyRow.osversion
}
$QueryResults | export-csv c:\tests.txt
我添加了一行打印$ QueryResults到stdout以下是在該控制檯輸出和寫我形成了循環顯示什麼我$ QueryResults了。
5
computer : localhost
osversion :
biosserial :
osarchitecture :
procarchitecture :
computer : localhost
osversion :
biosserial :
osarchitecture :
procarchitecture :
computer : not-online
osversion :
biosserial :
osarchitecture :
procarchitecture :
computer :
osversion : win8
biosserial :
osarchitecture :
procarchitecture :
computer : dano
osversion : win8
biosserial :
osarchitecture :
procarchitecture :
localhost
localhost
not-online
win8
dano
win8
謝謝你們。我在原來的問題中添加了$ QueryResults的輸出到控制檯以及我的for循環的輸出,其中我打印了計算機和osversion值。 – user461051 2014-12-05 13:01:29
也許我不明白在for循環中的$ MyRow值應該是什麼。我認爲這將是數據集中的每條記錄,然後我希望我的寫入輸出能夠打印計算機,然後是每行的osversion。但在輸出中,我得到它是首先打印所有三個計算機值,然後所有3 osversions – user461051 2014-12-05 13:12:53
我想出了我對MyRow值的誤解。它看起來不是我在foreach循環中得到的一行,而是在數據集第一列中的所有值。所以我添加了foreach塊來打印到標準輸出。例如($ aRow in $ MyRow.computer){$ aRow}給出所有計算機名稱。 – user461051 2014-12-05 13:21:36