我有一个PowerShell脚本,它递归循环一个目录和子目录并运行其中的所有SQL文件,并在.log文件1中记录执行成功,1表示异常.PowerShell脚本执行它应该执行的操作,但在cmd窗口中,我看到此错误:
Get-Content:找不到与参数名称'Raw'匹配的参数
从这条线
$query = Get-Content -Path $_.FullName -Raw
Run Code Online (Sandbox Code Playgroud)
此语句在循环内运行,因此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
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
该-Raw参数Get-Content在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当 -path 参数实际上不是路径时,我在 ps v 5 中遇到过此错误。
尝试Write-Host $_.fullname在抛出错误的行上方添加,以确保$_.fullname实际上是您认为的那样。
您使用的是 PowerShell v2 或更早版本。该参数-Raw是在 PowerShell v3 中引入的。升级 PowerShell 或通过管道传输Get-Contentthrough的输出Out-String:
$query = Get-Content -Path $_.FullName | Out-String
Run Code Online (Sandbox Code Playgroud)
您还应该能够直接运行这些文件sqlcmd(即无需读取其内容并将其传递给命令):
$result = SQLCMD -S $FullDBServer -E -I -i $_.FullName -d $Database
Run Code Online (Sandbox Code Playgroud)