0

Ich habe das folgende PowerShell-Skript zusammengestellt, das alle USPs auf einem Server scriptet.PowerShell SQL Scripting Alleinstellungsmerkmale und Benutzer

Gibt es eine Option, die Ausgabe in einzelne Dateien aufzuteilen (anstatt als eine ganze/große Datei zu speichern)?

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

Haben Sie versucht, Ihre Pipe in 'Out-File' innerhalb Ihres' Foreach-Object' (%) Skriptblocks zu platzieren? d. h. '% {$ _. Script() | Out-File ...} ' – Shaneis

+0

@Shaneis Danke. Rückt näher. Ich habe die Out-Datei in die Pipe eingefügt, und ich kann sehen, dass alles einzeln ausgeführt wird (wenn die Datei wächst und dann immer wieder reduziert wird) - aber nicht sicher, wie man das Foreach-Objekt einführt, so dass für jedes eine separate Datei erzeugt wird . 'Get-ChildItem -Pfad SQLSERVER: \ SQL \ Mein Server \ Default \ Databases \ mydb \ StoredProcedures \ | % {$ _. script() | out-file -Filepath "mylocation _ $ (get-date -f yyyyMMdd) .sql"} ' –

+0

Das liegt daran, dass Sie jedes Mal Ihre Datei überschreiben. Diese Skripts sollten schnell fertig sein, damit sie am selben Tag (hoffentlich) fertig sind. Versuchen Sie, die Uhrzeit oder den Namen der zu scriptierenden Prozedur hinzuzufügen, um den Dateinamen eindeutig zu machen, und sehen Sie, ob Ihnen das hilft. Oder benutze '-Append' nach dem' .sql''Bit – Shaneis

Antwort

0

Versuchen Sie Folgendes; Es sollte den Prozedurnamen an die Datei anhängen.

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" 
    } 

Dies sollte der Dateiname eindeutig pro Datenbank machen und nicht auf die Datei haben jedes Mal überschrieben. Genau das passiert derzeit mit Ihrem Skript.

+0

Ich sehe dein Denken, bekomme mich aber nicht ganz dorthin. Fehlermeldung empfangen - 'out-file: Operation kann wegen des Wildcard-Pfades nicht ausgeführt werden .. ...... löste nicht in eine Datei " –

+0

Ich hatte dieses Problem ein- oder zweimal und das Problem war, dass ein Entwickler ein '\' in den Namen eines der Verfahren gesetzt hatte. Ich werde die Antwort bearbeiten dies widerspiegeln, aber es kann ein anderes Zeichen sein. – Shaneis

Verwandte Themen