-3

我有一个带有 2 个 export-csv 的 powershell 脚本到同一个文件。

但是第二个 export-csv 会覆盖之前的 csv 文件。

我不想要这个。

对于第二个导出 csv,我想将结果写入 excel 中的 B 列,所以我想导出到同一个 csv 文件中,但导出到第二列。

$dataSet.Tables["Query1"] 返回:

COLUMN1
232

$dataSet.Tables["Query2"] 返回:

COLUMN2
289

这个怎么做?

有我的脚本:

$mysql = New-Object MySql.Data.MySqlClient.MySqlConnection("server=$serv;port=$port;uid=$user;pwd=$password;database=$db;Pooling=False")
$mysql.Open()

$sqlquery1 = Get-Content "C:\query1.txt"
$sqlquery2 = Get-Content "C:\query2.txt"

$req = New-Object Mysql.Data.MysqlClient.MySqlCommand($sqlquery1,$mysql)
$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.Fill($dataSet, "Query1") | Out-Null
$dataSet.Tables["Query1"] | Export-Csv -path "C:\result.csv" -NoTypeInformation

$req2 = New-Object Mysql.Data.MysqlClient.MySqlCommand($sqlquery2,$mysql)
$dataAdapter2 = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req2)
$dataSet = New-Object System.Data.DataSet
$dataAdapter2.Fill($dataSet, "Query2")  | Out-Null

$dataSet.Tables["Query2"] | Export-Csv -path "C:\result.csv" -NoTypeInformation

$mysql.Close()

谢谢

4

4 回答 4

2

正如@CB 提到的,在 PowerShell 3.0 之前-Append不存在。Export-Csv您可以在 PowerShell 2.0 及更早版本中执行以下操作:

... | ConvertTo-Csv -NoTypeInformation `
    | select -Skip 1 `
    | Out-File "C:\result.csv" -Append
于 2013-03-25T18:21:40.877 回答
1

看看Export-CSV帮助--Append开关就是你所追求的。

于 2013-03-25T15:31:32.373 回答
1

这就是我解决它的方法

$mysql = New-Object MySql.Data.MySqlClient.MySqlConnection("server=$serv;port=$port;uid=$user;pwd=$password;database=$db;Pooling=False")
$mysql.Open()

$sqlquery1 = Get-Content "C:\query1.txt"
$sqlquery2 = Get-Content "C:\query2.txt"

$req = New-Object Mysql.Data.MysqlClient.MySqlCommand($sqlquery1,$mysql)
$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.Fill($dataSet, "Query1") | Out-Null
$processrequest1 =  ($dataSet1.Tables["Query1"] | Format-Table -HideTableHeaders) | Out-String
$resultrequest1 = [int]$processrequest1

$req2 = New-Object Mysql.Data.MysqlClient.MySqlCommand($sqlquery2,$mysql)
$dataAdapter2 = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req2)
$dataSet = New-Object System.Data.DataSet
$dataAdapter2.Fill($dataSet, "Query2")  | Out-Null
$processrequest2 =  ($dataSet1.Tables["Query2"] | Format-Table -HideTableHeaders) | Out-String
$resultrequest2 = [int]$processrequest2


$array1 = @() 
$array1 += New-Object psobject -Property @{Column1=$resultrequest1;Column2=$resultrequest2}
$array1 |  Export-Csv -path "C:\result.csv" -NoTypeInformation -Delimiter ";"

$mysql.Close()
于 2013-03-26T10:06:34.630 回答
1

简单的回答:你没有。您的查询返回不同的标题。

如果它们是相同的值但不同的列名,您应该将第二个查询的结果转换为与第一个( column1 )具有相同属性名称的对象,并将两个查询的结果保存在一个数组中,当两者都完成时导出。

于 2013-03-25T19:00:51.863 回答