2015-01-04 5 views
0

PowerShell을 사용하여 실행할 다음 SQL 스크립트를 작성했습니다.CSV 파일에 출력 저장

cls 
foreach ($svr in get-content "demo.txt") 
{ 
    $con = "server=MC1-PQ10X.RF.LILLY.COM\SQL01;database=mylilly_WSS_Content_INCTSK0014840;Integrated Security=sspi" 

    $cmd = "SELECT 
Docs.DirName + '/' + Docs.LeafName AS 'Item Name', 
DocVersions.UIVersion, 
(DocVersions.UIVersion/512) as Version_Label, DocVersions.Level, DocVersions.TimeCreated 
FROM DocVersions FULL OUTER JOIN Docs ON Docs.Id = DocVersions.Id 
-- INNER JOIN Webs On Docs.WebId = Webs.Id 
--INNER JOIN Sites ON Webs.SiteId = SItes.Id 
WHERE (DirName LIKE '%globalcontentrepository%') 
AND (IsCurrentVersion = '0') 
AND (DocVersions.Id IN ('$svr'))" 

    $da = new-object System.Data.SqlClient.SqlDataAdapter ($cmd, $con) 

    $dt = new-object System.Data.DataTable 

    $da.fill($dt) |out-null 

    $dt | Export-Csv music.csv -Encoding ascii -NoTypeInformation 
} 

위의 코드에 직면 한 문제는 출력과 관련되어 있습니다. $svr 일 때마다이 코드가 새 CSV 파일을 만듭니다. 입력 파일에는 약 1000 개의 입력이 있습니다. 내 요구 사항은 모든 파일을 새 파일을 만드는 대신 동일한 파일에 저장해야한다는 것입니다.

+3

powershell 등을 전혀 알지 못하지만 docs는'-Append' 매개 변수에 대해 이야기합니다 : http://technet.microsoft.com/en-us/library/hh849932.aspx – PeterMmm

답변

4

목표를 달성하는 데는 여러 가지 방법이 있습니다. 하나는 @PeterMmm이 질문에 대한 의견 제안 출력 파일에 추가 할 수 있습니다 :

foreach ($svr in Get-Content "demo.txt") { 
    ... 
    $dt | Export-Csv music.csv -Encoding ascii -NoTypeInformation -Append 
}

단, Export-Csv PowerShell을 v3의 이전에 추가 지원하지 않습니다. 또한 출력 파일을 반복해서 열어야하기 때문에 일반적으로 appending은 성능에 부정적인 영향을 미칩니다. 내보내기 cmdlet을 루프 외부에 배치하고 출력 파일을 한 번에 작성하는 것이 좋습니다.

$music = foreach ($svr in Get-Content "demo.txt") { 
    ... 
    $dt 
} 
$music | Export-Csv music.csv -Encoding ascii -NoTypeInformation 

또는 표현식에서 실행 : 개인적으로

(foreach ($svr in Get-Content "demo.txt") { 
    ... 
    $dt 
}) | Export-Csv music.csv -Encoding ascii -NoTypeInformation 

내가 먼저 변수에 루프 출력을 지정해야 할 것이다, 그래서 foreach 루프는하지만, 파이프 라인과 잘 재생되지 않습니다

Get-Content "demo.txt" | ForEach-Object { 
    ... 
    $dt 
} | Export-Csv music.csv -Encoding ascii -NoTypeInformation 

주 당신이 r은해야합니다 전자는 파이프 라인으로 잘 작동 않기 때문에 '는 foreach 루프를 통해 ForEach-Object 루프를 선호하는 거라고 루프 변수 인 모든 변수를 $svr에 "현재 객체"변수 $_과 함께 사용하면됩니다.

관련 문제