2013-03-25 5 views
-3

У меня есть сценарий powershell с 2 export-csv в тот же файл.Несколько экспорт-csv без перезаписывания

Но второй экспорт-csv перезаписывает предыдущий файл csv.

Я не хочу этого.

Для второго экспорта-csv я хочу написать результат в столбец B в excel, поэтому я хочу экспортировать в тот же файл 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() 

Спасибо

ответ

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() 
1

Посмотрите на Export-CSV help - переключатель -Append является то, что вы после этого.

+0

Этот только в Powershell V3.0. –

+0

-NoClobber существует во всех версиях. – EBGreen

+0

Моя powerwhell не может найти параметр -Append. И -Noclobber это не то, что я ищу Спасибо за вашу помощь –

2

As @ C.B. упомянутый, -Append не существует в Export-Csv перед PowerShell 3.0. Что вы можете сделать в PowerShell 2.0 и более ранних версиях:

... | ConvertTo-Csv -NoTypeInformation ` 
    | select -Skip 1 ` 
    | Out-File "C:\result.csv" -Append 
1

Простой ответ: вы этого не делаете. Ваши запросы возвращают разные заголовки.

Если они имеют одинаковое значение, но разные имена столбцов, вы должны преобразовать результат из второго запроса в объекты с тем же именем свойства, что и первый (столбец1), и сохранить результаты обоих запросов в массиве, который вы экспортируете, когда оба сделаны.

Смежные вопросы