PowerShell SQL脚本USP和用户
问题描述:
我把放在一起的下面的PowerShell脚本放在服务器上的所有USP脚本中。PowerShell SQL脚本USP和用户
是否有一个选项可以将输出分成单个文件(而不是保存为一个整体/大文件)?
Get-ChildItem -Path SQLSERVER:\SQL\myserver\Default\Databases\mydb\StoredProcedures\ | %{$_.script() | out-file -Filepath "myfilelocation.sql"}
答
请尝试以下;它应该将过程名称附加到文件中。
Get-ChildItem -Path SQLSERVER:\SQL\myserver\Default\Databases\mydb\StoredProcedures\ |
%{
#Deal with invalid chars in Procedure name i.e. [Customers\Remove]
$SProc = "$($_.name -replace '\\', '_')"
# $Sproc | Out-Host # Uncomment this to check the procedure names...
$_.script() |
out-file -Filepath "myfilelocation_$SProc.sql"
}
这应该使每个数据库的文件名都是唯一的,并且不会每次覆盖文件。这就是你的脚本正在发生的事情。
+0
我看到你的想法后,却没有完全得到我有收到错误消息 - '出文件:不能因为通配符路径进行操作.. ......没有解决的file' –
+0
我有这样的问题一次或两次的问题是,开发人员已经投入的过程之一的名称“\”。我将编辑答案反映这一点,但它可能是另一个字符。 – Shaneis
你有没有尝试将你的管道放入你的'Foreach-Object'(%)scriptblock内的'Out-File'?即'%{$ _。Script()| Out-File ...} – Shaneis
@Shaneis谢谢。越来越近。我已经添加,输出文件到管道,我可以看到它单独做的一切(如文件增长,则减少了重复) - 但不知道让一个单独的文件中制作了每个如何介绍的foreach对象。 'Get-ChildItem -Path SQLSERVER:\ SQL \ my server \ Default \ Databases \ mydb \ StoredProcedures \ | %{$ _。script()|出文件-FilePath“mylocation _ $(获取最新-f年月日)的.sql”}' –
那是因为你过写作,每次您的文件。这些脚本应该快速完成,这样他们都将在同一天内完成(希望)。尝试添加您正在编写脚本的过程的时间或名称,以使文件名独一无二,并查看是否可以帮助您。或者使用'-Append'的'.SQL“'位 – Shaneis