作为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 }
答案 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")