0

サーバー上のすべてのUSPをスクリプト化する以下のPowerShellスクリプトをまとめました。PowerShell SQLスクリプトUSPとユーザー

アウトプットを個々のファイルに分割するオプションはありますか?

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

あなたのパイプを 'Foreach-Object'(%)スクリプトブロックの' Out-File'に置いてみましたか?すなわち '%{$ _。Script()| Out-File ...} ' – Shaneis

+0

@Shaneisありがとうございます。近くなってる。 Out-Fileをパイプに追加しましたが、ファイルが大きくなるにつれてすべてが個別に処理されることがわかりましたが、繰り返して減らすことはできますが、Foreach-Objectを導入して各ファイル。 'Get-ChildItem -Path SQLSERVER:\ SQL \ my server \ Default \ Databases \ mydb \ StoredProcedures \ %{$ _。script()| outfile -Filepath "mylocation _ $(get-date -f yyyyMMdd).sql"} ' –

+0

これは、毎回ファイルを上書きするためです。これらのスクリプトはすばやく完了して、同じ日にすべて終了するようにしてください(うまくいけば)。スクリプティングしているプロシージャーの時間や名前を追加して、ファイル名を一意にし、それがあなたに役立つかどうか確認してください。または、 '.sql"ビットの後に '-Append'を使用してください。 – 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

あなたの考えを見ましたが、私をそこに連れて来ません。エラーメッセージを受け取った - ' out-file:ワイルドカードパス......ファイルに解決しなかった」 –

+0

私はその問題を1〜2回持ちました。問題は、開発者が手続きの1つの名前に '\'を入れてしまったことです。これを反映するが、それは別の文字かもしれない。 – Shaneis

関連する問題