Sql server 附加到Powershell脚本的输出

Sql server 附加到Powershell脚本的输出,sql-server,powershell,Sql Server,Powershell,我正在尝试编写一个powershell脚本,该脚本将创建一个sql文件,其中包含给定目录中的文件名列表,并在每个文件名的开头附加一个PRINT语句和“:r”命令,最后在文件名的结尾添加“GO” 请看下面 PRINT 'C:/Schemas/Admin.sql' GO :r "C:/Schemas/Admin.sql" GO PRINT 'C:/Schemas/Audit.sql' GO :r "C:/Schemas/Audit.sql" GO 我可以打

我正在尝试编写一个powershell脚本,该脚本将创建一个sql文件,其中包含给定目录中的文件名列表,并在每个文件名的开头附加一个PRINT语句和“:r”命令,最后在文件名的结尾添加“GO”

请看下面

PRINT 'C:/Schemas/Admin.sql'
GO
:r "C:/Schemas/Admin.sql"
GO
PRINT 'C:/Schemas/Audit.sql'
GO
:r "C:/Schemas/Audit.sql"
GO

我可以打印出文件名,但我似乎不知道如何为每行添加前缀和后缀。 这就是我所拥有的:

(get-childitem "C:\schemas" -recurse | where {$_.extension -eq ".sql"}).fullname | out-file "C:\powerShell\masterSQL.sql"


因此,如果您能够以您想要的方式在控制台中显示它,那么您可以捕获到一个变量,或者以相同的格式直接输出管道。可以做一些改进

首先,对
getchilditem
命令本身进行过滤,让文件系统提供程序承担繁重的工作。比获取所有文件和使用
Where Object

第二,使用
设置内容
,这样就不会出现奇怪或意外的编码问题

最后要注意的是,在
$\uu
(全名)周围加上双引号,这是为了确保路径被双引号包围

(Get-ChildItem "C:\schemas" -Filter *.sql -Recurse).FullName |
        ForEach-Object {
            "PRINT ""$_"""
            "GO"
            ":r ""$_"""
            "GO"
        } | Set-Content -Path "C:\powerShell\masterSQL.sql" -Encoding UTF8