使用 PowerShell 将 PostgreSQL 查询导出为 CSV
PostgreSQL Query export to CSV with PowerShell
$sf = "\\domain\dept\dcgsi\Extracts\Tableau_Unlicensed_Users.csv"
if (Test-Path $sf){
Remove-Item $sf
}
$query = @"
\copy (SELECT Name
FROM _users
WHERE licensing_role_name = 'Unlicensed')
TO $sf
WITH CSV DELIMITER ','
"@
$conn = New-Object -ComObject ADODB.Connection
# use existing 64 bit ODBC System DSN that we set up manually
$conn.Open('PostgreSQL30')
$conn.Execute($query)
$conn.Close()
当我尝试执行此操作时,我总是在 $conn.Execute()
行中收到有关“\”的错误。我认为这与字符转义有关,也许我做错了。
如果我只需要从 _users 获取任何记录的名称字段并将其输出到 CSV,是否有更好的方法使用 PowerShell 执行此操作?
最终我将添加更多内容以循环遍历 CSV 中的每条记录并执行 tabcmd 以删除所有未经许可的用户。
$sf = "\domain\dept\dcgsi\Extracts\Tableau_Unlicensed_Users.csv"
if (Test-Path $sf){
Remove-Item $sf
}
$query = @"
SELECT Name
FROM _users
WHERE licensing_role_name = 'Unlicensed'
"@
function Get-ODBC-Data{
$conn = New-Object System.Data.Odbc.OdbcConnection
$conn.ConnectionString = "DSN=PostgreSQL30;"
$conn.Open()
$cmd = New-object System.Data.Odbc.OdbcCommand($query, $conn)
$ds = New-Object system.Data.DataSet
(New-Object System.Data.Odbc.OdbcDataAdapter($cmd)).Fill($ds) | Out-Null
$conn.Close()
$ds.Tables[0] | Export-Csv $sf
}
Get-ODBC-Data
这满足了我 99% 的需求;我现在只需要处理 csv 并删除前两行。第一行是类型信息消息,第二行是列 header.
$sf = "\\domain\dept\dcgsi\Extracts\Tableau_Unlicensed_Users.csv"
if (Test-Path $sf){
Remove-Item $sf
}
$query = @"
\copy (SELECT Name
FROM _users
WHERE licensing_role_name = 'Unlicensed')
TO $sf
WITH CSV DELIMITER ','
"@
$conn = New-Object -ComObject ADODB.Connection
# use existing 64 bit ODBC System DSN that we set up manually
$conn.Open('PostgreSQL30')
$conn.Execute($query)
$conn.Close()
当我尝试执行此操作时,我总是在 $conn.Execute()
行中收到有关“\”的错误。我认为这与字符转义有关,也许我做错了。
如果我只需要从 _users 获取任何记录的名称字段并将其输出到 CSV,是否有更好的方法使用 PowerShell 执行此操作?
最终我将添加更多内容以循环遍历 CSV 中的每条记录并执行 tabcmd 以删除所有未经许可的用户。
$sf = "\domain\dept\dcgsi\Extracts\Tableau_Unlicensed_Users.csv"
if (Test-Path $sf){
Remove-Item $sf
}
$query = @"
SELECT Name
FROM _users
WHERE licensing_role_name = 'Unlicensed'
"@
function Get-ODBC-Data{
$conn = New-Object System.Data.Odbc.OdbcConnection
$conn.ConnectionString = "DSN=PostgreSQL30;"
$conn.Open()
$cmd = New-object System.Data.Odbc.OdbcCommand($query, $conn)
$ds = New-Object system.Data.DataSet
(New-Object System.Data.Odbc.OdbcDataAdapter($cmd)).Fill($ds) | Out-Null
$conn.Close()
$ds.Tables[0] | Export-Csv $sf
}
Get-ODBC-Data
这满足了我 99% 的需求;我现在只需要处理 csv 并删除前两行。第一行是类型信息消息,第二行是列 header.