- 传送门读取CSV文件→Import-Csv
- 在导出数据到CSV时,有一个容易忽视的地方,导致导出一直失败,之前一直以为是自己写法问题,查了很多资料,但是我看了自己的写法和官网示例 12:将哈希表转换为 CSV并没有什么太大差距,最后发现是Powershell在循环时,如果直接用【循环对象.项目名】赋值,导致最后输出数据不对,必须要将【循环对象.项目名】赋值给临时变量,再使用临时变量导出,就不会出问题,这个不知道原因是什么,以前做perl,还是java之类的都没有这种问题,可能习惯了别的语言的写法,导致在这里卡了很长时间,上代码。
#Export-Csv:将对象转换为一系列字符分隔的值 (CSV) 字符串,并将字符串保存到文件中。
#System.Management.Automation.PSCustomObject
#https://blog.csdn.net/charles542307299/article/details/132090591
$username = 'root'
$password = ConvertTo-SecureString -String "123456" -AsPlainText -Force
$credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $username,$password
#开启连接
Open-MySqlConnection -Server "localhost" -Port "3307" -Credential $credential -Database "test"
#数据查询
Write-Output "----------------数据查询start--------------------"
$data = Invoke-SqlQuery -query "SELECT * FROM User"
Write-Output $data
Write-Output "----------------数据查询 end--------------------"
$output = @()
# foreach ($_ in $data) {
# $id = $_.id
# $username = $_.username
# $password = $_.password
# $csvObject = [pscustomobject]@{
# id = $id
# username = $username
# password = $password
# }
# $output += $csvObject
# }
$data | ForEach-Object{
$id = $_.id
$username = $_.username
$password = $_.password
$csvObject = [pscustomobject]@{
id = $id;
username = $username;
password = $password
}
$output += $csvObject
}
#关闭连接
Close-SqlConnection
$output | Export-Csv -Path ./output.csv
3.执行
PS /Users/sixdog/Documents/PowerShell> ./test.ps1
----------------数据查询start--------------------
id username password
-- -------- --------
1 张三 223456
3 李四 123456
4 王五 123456
5 赵六 123456
19 冯七 123456
----------------数据查询 end--------------------
PS /Users/sixdog/Documents/PowerShell>
4.生成csv文件及内容