2016-08-12 29 views
0

我有一个PowerShell函数Invoke-SqlParser(使用GSP),它将提取SQL脚本中的表和列的列表。增强Get-ChildItem流水线数据

我想生成包含源文件的路径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 

是有没有办法将Invoke-SqlParser函数中的内容添加到管道中,以便保留来自Get-ChildItem Cmdlet的内容?还是我需要将它“插入”到解析引擎生成的管道中?

+2

你说你有一个函数,难道你只是修改函数来传递数据通过正常输出(也许用开关)? – TheMadTechnician

+0

是的,但我不确定正确的做法。此外,我只是添加'FullName'属性或整个'FileInfo'实例?由于脚本文件与其中的表和字段之间存在“一对多”关系,那么如何表示呢?也许'[PsCustomObject] @ {File = $ FileInfo; TableColumn = @()}'? – craig

+0

没有看到'Invoke-SqlParser'函数,我不知道如何帮助你通过路径。 – TheMadTechnician

回答

0

好的,所以你链接的不是一个函数,那是一个PowerShell模块。你想要的是一个循环或一个函数。我认为,为你的目的,一个功能对你来说很好。这个函数允许你将文件对象传递给它,它将执行你的Get-Content和Invoke-SqlParser命令,通过属性'File'向输出添加完整的文件路径。

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