运行多个* .sql查询文件登录到文件
问题描述:
我的目标是让PowerShell脚本针对特定的SQL服务器运行多个Sqlquery.sql文件,然后将输出记录到日志文件中。运行多个* .sql查询文件登录到文件
我无法使日志记录工作,我不知道我错过了什么。我的日志文件总是空的,我不知所措。
内容的C:\ TEMP:
Build1.SQL Build2.SQL Build3.sql Build4.sql Build5.SQL Build6.SQL
$PatchPostConvSQLScripts = Get-ChildItem -Path C::\Temp -Filter *.sql -Name
$Queries = $PatchPostConvSQLScripts
foreach ($query in $Queries){
Write-Host "Starting: $query"
Invoke-Sqlcmd -ServerInstance $DBServer -InputFile $query |
Out-File "C:\TEMP\scriptResults.log"
Write-Host "Completed: $query"
}
一旦我得到它记录到文件,我需要每次都得到一个新行与`n`r
,但宝宝现在几步之遥。
有没有更好的方法来做到这一点,我只是不知道?
答
首先,正如@Ben Thul在他的评论中提到的那样,通过在Management Studio中运行它们来检查SQL文件是否实际输出了一些内容(结果集或消息)。
然后,您需要使用-Verbose标志,因为此命令会告诉您。
Get-Help Invoke-Sqlcmd -Full
调用-SQLCMD不返回SQL Server邮件输出,如打印语句的 输出,除非你使用PowerShell的-Verbose参数。
$Queries = Get-ChildItem -Path C::\Temp -Filter *.sql -Name
Clear-Content -Path "C:\TEMP\scriptResults.log" -Force
foreach ($query in $Queries){
Write-Host "Starting: $query"
Invoke-Sqlcmd -ServerInstance $DBServer -InputFile $query -Verbose |
Add-Content -Path "C:\TEMP\scriptResults.log"
Write-Host "Completed: $query"
}
答
你有没有在日志文件中的主要原因是它在每次运行该Output-File
重写整个数据。尝试使用-Verbose
提到在回答通过TechSpud收集打印/ server语句,或将输出写入临时文件和Add-Content
主日志文件:
$DBServer = "MYPC\SQLEXPRESS"
$sqlPath = "C:\TEMP\"
$log = "scriptResults.log"
$tempOut = "temp.log"
$files = Get-ChildItem -Path $sqlPath -Filter *.sql -Name
foreach ($file in $files){
Write-Host "Starting: $file"
Invoke-SQLcmd -ServerInstance $DBServer -InputFile $sqlPath$file | Out-File $sqlPath$tempOut
Get-Content $sqlPath$tempOut | Add-Content $sqlPath$log
Write-Host "Completed: $file"
}
+0
这让我到了我需要的地方。感谢您的帮助 –
愚蠢的问题,但做你的脚本* *生成任何输出?也就是说,如果你在不将'invoke-sqlcmd'调用管道输出到'out-file'的情况下运行它们,屏幕上是否会输出? –
你是否错过了Out-File的-append标志? –