2016-08-01 60 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")