Get-Content -Raw参数错误

时间:2016-09-19 18:55:12

标签: sql powershell

我有一个PowerShell脚本,它递归循环一个目录和子目录并运行其中的所有SQL文件,并在.log文件1中记录执行成功,1表示异常。 PowerShell脚本执行它应该执行的操作,但在cmd窗口中,我看到此错误:

  

Get-Content:找不到与参数名称“Raw”

匹配的参数

从这一行开始

$query = Get-Content -Path $_.FullName -Raw

此语句在循环内运行,因此FullName每次迭代都会更改。这是我使用的版本。

Name             : Windows PowerShell ISE Host
Version          : 5.0.10586.117

示例脚本如下:

Get-ChildItem $ScriptFolder -Recurse -Exclude "*Archive*" -Filter *.sql |
  sort Directory |
  ForEach-Object { 
    $query = Get-Content -Path $_.FullName -Raw
    $result = SQLCMD -S $FullDBServer -E -I -Q $query -d $Database

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

Get-Content的{​​{1}}参数是在PS3中引入的。

要在一个字符串中获取文件内容,有几种方法。

  • 适用于任何PS版本的最快方法:
    $text = [IO.File]::ReadAllText('c:\path\file.ext')
  • PS3 +慢2倍的方法:
    $text = Get-Content 'c:\path\file.ext' -Raw
  • 与PS2兼容的替代品慢100倍:
    $text = Get-Content 'c:\path\file.ext' | Out-String
  • PS2兼容替代品的30倍:
    $text = Get-Content 'c:\path\file.ext' -ReadCount 1000 | Out-String

答案 1 :(得分:2)

您正在使用PowerShell v2或更早版本。 PowerShell v3引入了参数-Raw。升级PowerShell或将Get-Content的输出通过Out-String

$query = Get-Content -Path $_.FullName | Out-String

您还应该能够使用sqlcmd直接运行文件(即不读取其内容并将其传递给命令):

$result = SQLCMD -S $FullDBServer -E -I -i $_.FullName -d $Database

答案 2 :(得分:2)

当-path参数实际上不是路径时,我在ps v 5中遇到过这个错误。

尝试在引发错误的行上方添加Write-Host $_.fullname,以确保$_.fullname实际上是您认为的。