我有一个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
有什么想法吗?
答案 0 :(得分:5)
Get-Content
的{{1}}参数是在PS3中引入的。
要在一个字符串中获取文件内容,有几种方法。
$text = [IO.File]::ReadAllText('c:\path\file.ext')
$text = Get-Content 'c:\path\file.ext' -Raw
$text = Get-Content 'c:\path\file.ext' | Out-String
$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
实际上是您认为的。