2016-08-12 4 views
0

SQLスクリプトのテーブルと列のリストを抽出するPowerShell関数Invoke-SqlParserGSPを使用)があります。Get-ChildItemパイプラインデータを強化する

私は、構文解析エンジンの結果に加えて、ソースドキュメントのパスが含まれているCSVファイルを生成したい:Output.csv

PS > gci '\\path\to\files' -Include *.sql -Recurse | Get-Content -raw | Invoke-SqlParser -Syntax 'oracle' | ConvertTo-Csv | Out-File ~\Desktop\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コマンドレットのコンテンツを保持する方法がありますか?または、解析エンジンによって生成されたパイプラインに「挿入」する必要がありますか?

+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 
} 
関連する問題