使用PowerShell将PostgreSQL查询导出为CSV

时间:2018-05-16 03:10:49

标签: powershell tableau-server

$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以删除所有未经许可的用户。

1 个答案:

答案 0 :(得分:0)

$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并删除前两行。第一行是类型信息消息,第二行是列标题。