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