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() | out-file -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

한 두 번 그 문제가 있었는데 문제는 개발자가 프로 시저 중 하나의 이름에'\ '를 넣었습니다. 이것을 반영하지만 다른 문자 일 수 있습니다. – Shaneis