Powershell:如何将多行字符串解析为String参数?

时间:2016-08-01 16:39:39

标签: sql powershell oracle11g

作为powershell的新手,我试图通过一个包含多个sql文件的文件夹来读取并通过poweshell脚本迭代它们从oracle读取数据并导出到CSV。

如果我的sqlfile有单行语句没有代码问题,它的工作正常,如果我的sql文件有多行语句 - 一如既往,

powershell错误说出来 "Get-DataTable : Cannot process argument transformation on parameter 'sql' Cannot convert value to type System.String."

你能帮我解决一下这个问题吗?在我的代码快照下面。

function Get-DataTable{ 
        [CmdletBinding()] 
        Param( 
            [Parameter(Mandatory=$true)] 
            [Oracle.DataAccess.Client.OracleConnection]$conn, 
            [Parameter(Mandatory=$true)] 
            [string]$sql 
        ) 
$cmd = New-Object Oracle.DataAccess.Client.OracleCommand($sql,$conn) 
$da = New-Object Oracle.DataAccess.Client.OracleDataAdapter($cmd) 
$dt = New-Object System.Data.DataTable 
[void]$da.Fill($dt) 
return ,$dt 
} 

foreach ($file in Get-ChildItem -path $ScriptsDirectory -Filter *.sql | sort-object -desc ) 
{ 
$SQLquery = get-content "$ScriptsDirectory\$file"
echo $SQLquery
$fileName = $file.name.split(".")[0]
$dt = Get-DataTable $conn $SQLquery 
Write-Host "Retrieved records:"  $dt.Rows.Count -ForegroundColor Green
$dt | Export-Csv -NoTypeInformation -LiteralPath $WorkingDirectory\$fileName.csv
Write-Host "Output Written to :"  $WorkingDirectory\$fileName.csv -ForegroundColor Green    }

1 个答案:

答案 0 :(得分:1)

Get-Content返回一行数组。如果您使用PowerShell v3或更高版本,则可以使用-Raw参数将文件作为一个大字符串读取:

$SQLquery = get-content "$ScriptsDirectory\$file" -Raw

或者,您可以使用行结尾重新加入数组:

$SQLquery = $SQLquery -join "`r`n"

或者您可以使用.net类一起阅读该文件:

$SQLquery = [System.IO.File]::ReadAllText("$ScriptsDirectory\$file")