2016-08-12 2 views
0

은 Get-ChildItem을 파이프 라인 데이터를 향상시킬 수 있습니다.나는 SQL 스크립트에 테이블과 열 목록을 추출하는 PowerShell을 기능 <code>Invoke-SqlParser</code> (<a href="http://sqlparser.com/" rel="nofollow">GSP</a>를 사용하여)가

내가 구문 분석 엔진의 결과뿐만 아니라, 소스 문서의 경로를 포함하는 CSV 파일을 생성하고 싶습니다 :

PS > gci '\\path\to\files' -Include *.sql -Recurse | Get-Content -raw | Invoke-SqlParser -Syntax 'oracle' | ConvertTo-Csv | Out-File ~\Desktop\Output.csv 
Output.csv

원하는 내용 :

File      Table Column 
----      ----- ------ 
\\path\to\files\script0.sql table0 column0 
\\path\to\files\script0.sql table1 column1 
\\path\to\files\scriptB.sql tableB columnR 
\\path\to\files\scriptB.sql tableC columnQ 

인가 거기는 Get-ChildItem cmdlet의 내용을 보존하도록 파이프 라인에 Invoke-SqlParser 기능에서 콘텐츠를 추가하는 방법? 아니면 구문 분석 엔진에서 생성 된 파이프 라인에 '삽입'해야합니까?

+2

정상적인 출력 (스위치 포함)을 통해 해당 데이터를 전달하는 기능을 수정할 수는 없습니까? – TheMadTechnician

+0

네,하지만 그렇게 할 수있는 방법이 확실하지 않습니다. 게다가'FullName' 속성이나 전체 FileInfo 인스턴스를 추가합니까? 스크립트 파일과 테이블과 필드 사이에 '일대 다'관계가 있으므로 어떻게 표현할 수 있습니까? 아마도'[PsCustomObject] @ {File = $ FileInfo; TableColumn = @()}'? – craig

+0

'Invoke-SqlParser' 함수를 보지 않고 패스를 전달하는 방법을 모르겠습니다. – TheMadTechnician

답변

0

좋아, 그래서 당신이 연결하는 것은 그 PowerShell은 모듈의 함수가 아닙니다. 원하는 것은 루프 또는 함수입니다. 나는 당신의 목적을 위해 기능이 당신을 위해 잘 작동 할 것이라고 생각합니다. 재산 '파일'로 출력에 전체 파일 경로를 추가,이 함수에 파이프 파일 객체에 당신을 수 있습니다, 그것은 당신의 GET-내용을 수행하고, 호출 - SqlParser 명령.

Function Add-SqlParsing{ 
    [CmdletBinding()] 
    Param(
     [Parameter(ValueFromPipelinebyPropertyName = $true)] 
     [Alias('Path')] 
     [String]$FullName 
    ) 
    Invoke-SqlParser (Get-Content $FullName -Raw) | Add-Member 'File' $FullName 
}