2016-08-25 8 views
1
でテキストファイル

私はファイル名でID値のマップである(ローカルファイルシステム上の)テキストファイル持って読んで:各行は、PowerShellの

1111, testfile1.xml 
2222, testfile2.xml 
3333, testfile3.xml

すると、マップエントリであるので、「1111」ですtestfile1.xmlの対応するID値。

私は各テストファイルをエンドポイントに投稿しようとしていますが、POSTするエンドポイントのURIに必要なので、ファイルに対応する関連ID値を取得する必要があります。すべてtestfilex.xmlさんが含まれているとPOSTを行うディレクトリを再帰的に私のスクリプトから

コードスニペット:

$testFiles = Get-ChildItem $testFileDir 
$mapFileLocation = "C:/local/Desktop/map.txt" 

foreach ($file in $testFiles) { 
    $content = Get-Content $file.PSPath 
    #$id = GRAB ID HERE /*TODO*/ 
    $URI = "http://www.myendpoint:1000/" + $id 
    $request = Invoke-WebRequest -Uri $URI -Method PUT -Body $content -ContentType "application/xml" 

は、私はPowerShellを介して、このような$idを構築することができます方法はありますか?おそらく正規表現で?このようにテキストファイルを解析することはできますか?

+1

を考えがありますか? – Eris

答えて

1

マップファイルをハッシュテーブルに読み込み、ファイル名をキーに、IDを値として使用します。

$map = @{} 
Import-Csv $mapFileLocation | ForEach-Object { $map[$_.Filename] = $_.ID } 

あなたのマップファイルを使用すると、パラメータ-Header経由で列のヘッダー名を定義することができ、ヘッダーがない場合:あなたもよいでしょうあなたの例に示すように、ファイルが空白文字が含まれている場合

Import-Csv $mapFileLocation -Header ID,Filename 

を値はTrim()です。

あなたはこのようにそれを使用するハッシュテーブルを作成したら:あなたは `インポートCsv`

foreach ($file in $testFiles) { 
    $content = Get-Content $file.FullName 
    $URI = 'http://www.myendpoint:1000/' + $map[$file.Name] 
    ... 
}