0

我把放在一起的下面的PowerShell脚本放在服务器上的所有USP脚本中。PowerShell SQL脚本USP和用户

是否有一个选项可以将输出分成单个文件(而不是保存为一个整体/大文件)?

Get-ChildItem -Path SQLSERVER:\SQL\myserver\Default\Databases\mydb\StoredProcedures\ | %{$_.script() | out-file -Filepath "myfilelocation.sql"} 
+1

你有没有尝试将你的管道放入你的'Foreach-Object'(%)scriptblock内的'Out-File'?即'%{$ _。Script()| Out-File ...} – Shaneis

+0

@Shaneis谢谢。越来越近。我已经添加,输出文件到管道,我可以看到它单独做的一切(如文件增长,则减少了重复) - 但不知道让一个单独的文件中制作了每个如何介绍的foreach对象。 'Get-ChildItem -Path SQLSERVER:\ SQL \ my server \ Default \ Databases \ mydb \ StoredProcedures \ | %{$ _。script()|出文件-FilePath“mylocation _ $(获取最新-f年月日)的.sql”}' –

+0

那是因为你过写作,每次您的文件。这些脚本应该快速完成,这样他们都将在同一天内完成(希望)。尝试添加您正在编写脚本的过程的时间或名称,以使文件名独一无二,并查看是否可以帮助您。或者使用'-Append'的'.SQL“'位 – Shaneis

回答

0

请尝试以下;它应该将过程名称附加到文件中。

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