2016-05-10 6 views
2

私は、PowerShell PSObjectをバッチファイルの出力から作成しようとしています。バッチファイルの出力からPowerShell PSObjectを作成する方法は?

function browseGateway { 
    & $migrationUtilityScript "browse" "-z" "$sourceGateway" "-showIds" "--hideProgress" | 
    select -Skip 1 | 
    Tee-Object -Variable gatewayItems | 
    Out-Null | 
    Sort-Object 
    Clear-Host 
    return $gatewayItems 
} 

出力は次のようになります:

folder   27fa3a0eb01caf5f1e31b6aeadd68d35 _Management and internal 
folder   2ab9e48a1b83968c3844d93bc0919919 Mediclinic 
folder   2c0a788b7f39a0415b423f14c0aa9e9c OAuth 
folder   a49ab6404138110fbd6c993cc9b87e46 customers 
folder   b015056834707a42a07bcbfbbeb0a6dd Users 
folder   b015056834707a42a07bcbfbbeb2ca34 Product Offerings 
folder   e001cfd0c1c1ffaa18e187b5e72fc718 OTK-3.2.00 
policy   20a437bb3db29c1700a4f074773ffa41 DemoLogo 
service   2ab9e48a1b83968c3844d93bc08ba780 kevinGMU 
service   2ab9e48a1b83968c3844d93bc09596e9 testJJ 
service   3afaef13bd772e8e25acfe85c4d101a7 Error 
service   88f089fba30183fc4f18b7b7d05f5889 test 

私が欲しい

私は私のバッチファイルの出力を含むオブジェクトを与える、このようなバッチファイルを呼び出していますさらなる処理のためにそれらをPowerShellオブジェクトに入れます:

  • Col 1 UMN:タイプ
  • コラム2:IDは
  • コラム3:名前

私はあなたがこのためにNew-Objectを使用する必要がありますかなり確信しているが、私は情報をソートする方法が全くわかりません。各単語に正規表現を使用し、それをさらに分割する必要がありますか?

答えて

2

タブ区切りファイルを効果的に読み込んでいるので、RegExを使用する必要はありませんが、確かにそのようにアプローチできます。あなたは、単に正規表現を使用したい場合は

Name      ID        Type 
----      --        ---- 
_Management and internal 27fa3a0eb01caf5f1e31b6aeadd68d35 folder 
Mediclinic    2ab9e48a1b83968c3844d93bc0919919 folder 
OAuth     2c0a788b7f39a0415b423f14c0aa9e9c folder 
customers    a49ab6404138110fbd6c993cc9b87e46 folder 
Users     b015056834707a42a07bcbfbbeb0a6dd folder 
Product Offerings  b015056834707a42a07bcbfbbeb2ca34 folder 
OTK-3.2.00    e001cfd0c1c1ffaa18e187b5e72fc718 folder 
DemoLogo     20a437bb3db29c1700a4f074773ffa41 policy 
kevinGMU     2ab9e48a1b83968c3844d93bc08ba780 service 
testJJ     2ab9e48a1b83968c3844d93bc09596e9 service 
Error     3afaef13bd772e8e25acfe85c4d101a7 service 
test      88f089fba30183fc4f18b7b7d05f5889 service 

:中

$items| ForEach-Object { 
    $properties = $_ -Split "`t" 
    New-Object PSObject -Property @{ 
    Type = $properties[0].Trim(); 
    ID = $properties[1].Trim(); 
    Name = $properties[2].Trim(); 
    } 
} 

結果:あなたは$itemsオブジェクトにあなたの生の入力を持っていたら、PSObjectの配列に変換するには、次のステートメントを使用することができます$_.Split$_ -Match <RegEx>と交換して、$properties配列を参照する代わりに、$matches変数を参照することになります。 Jouni Heikniemiのブログにはexceptionally good run down of RegEx in PowerShellがあります。

+1

これは魅力のように働きました。 $ items変数の代わりに、私はbrowseGatewayへの関数呼び出しを使用して、私が必要とするものを正確に与えました。ありがとう! –

+1

PSバージョンは参照されていないので、PS 3.0以降では、この 'New-Object PSObject -Property @ {'からこの '[PSCustomObject] @ {' –

0

-splitで簡単にこれを行うことができます。正規表現はこれほど単純なものではありません。

$Content = (Invoke-WebRequest "http://pastebin.com/raw/591dk6Gj").Content 

$FinalObj = $Content -split "`r`n" | % { 
    $Delimited = $_ -split "`t" 

    [PSCustomObject]@{ 
     Col1 = $Delimited[0] 
     Col2 = $Delimited[1] 
     Col3 = $Delimited[2] 
    } 
} 

return $FinalObj 

あなたはこれを含む$ FinalObjで終わる:

Col1   Col2        Col3      
----   ----        ----      
folder   27fa3a0eb01caf5f1e31b6aeadd68d35 _Management and internal 
folder   2ab9e48a1b83968c3844d93bc0919919 Mediclinic    
folder   2c0a788b7f39a0415b423f14c0aa9e9c OAuth     
folder   a49ab6404138110fbd6c993cc9b87e46 customers    
folder   b015056834707a42a07bcbfbbeb0a6dd Users     
folder   b015056834707a42a07bcbfbbeb2ca34 Product Offerings  
folder   e001cfd0c1c1ffaa18e187b5e72fc718 OTK-3.2.00    
policy   20a437bb3db29c1700a4f074773ffa41 DemoLogo     
service   2ab9e48a1b83968c3844d93bc08ba780 kevinGMU     
service   2ab9e48a1b83968c3844d93bc09596e9 testJJ     
service   3afaef13bd772e8e25acfe85c4d101a7 Error     
service   88f089fba30183fc4f18b7b7d05f5889 test      
+0

»正規表現にはちょっとしたoverkill« - '-split'はおそらくあなたが知っているように、正規表現を引数として取ります。それで、複雑さを本当に避けているわけではありません。 – Joey

+0

私は、(。+?) 't(。+?)' t(。+)は 't – ConnorLSW

関連する問題