2016-08-01 44 views
0

作为powershell的新手,即时通讯尝试读取通过一个文件夹有多个sql文件,并通过poweshell脚本迭代他们从oracle读取数据并导出到CSV。Powershell:如何将多行字符串解析为字符串参数?

如果我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

'获取内容“$ ScriptsDirectory \ $文件”' - >'获取内容“$ ScriptsDirectory \ $文件” -Raw' – PetSerAl

回答

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")