2017-06-19 11 views
2

これは詐欺だが、しばらくの間検索した後、私のケースでうまくいった答えを見つけることができませんでした。powershellスクリプトがadd-memberのscriptproperty入力を正しく列挙していない

私は写真の顔を検索するpythonスクリプトを持っています。 Pythonスクリプトは正常に動作し、現在、その出力をcsvファイルに組み込み、いくつかの統計を実行するために使用できます。

powershellを入力してください。

$picts = gci *.jpg 
$(foreach ($f in $picts) 
{ 
    $obj2 = New-Object System.Object  
    $obj2 | Add-Member -MemberType NoteProperty -Name fileName -Value $f.Name 
    $obj2 | Add-Member -MemberType ScriptProperty -Name datumN -Value { 
     python face_detect_batch.py $f.Name 
     } 
    $obj2 
} 
) | export-csv t.csv 

Pythonスクリプトは、それが写真に関するいくつかの情報と一緒に供給されたファイル名を含む単一の行を出力します。

は、ここに私のPowerShellスクリプトです。

私は、その中に2つのjpeg、1.jpgと2.jpgを持つフォルダでスクリプトをテストしています。各写真で手書きでスクリプトを実行すると、期待どおりに動作します。私は次の出力を得るの写真を反復処理するために上記のスクリプトを実行した場合

しかし、:

#TYPE System.Object 
fileName datumN 

1.jpg name: 2.jpg; blurScore: 269; facex: 68; facey: 84; faceWidth: 155; faceHeight:155 
2.jpg name: 2.jpg; blurScore: 269; facex: 68; facey: 84; faceWidth: 155; faceHeight:155 

出力は、スクリプトの繰り返し処理は、私が期待していることを示しており、$obj2年代に二つの異なるファイル名を追加しますfilenameプロパティを使用しますが、スクリプトプロパティのadd-memberを実行すると、私のpythonスクリプトには両方の時間に2.jpgが与えられます。

私は、add-memberの値フィールドに[ref]$f.name$global:f.nameを入力しようとしましたが、何も変更がありません。私はいつも2.jpgが私のpythonスクリプトに渡されます。

$f.Nameの最初の参照は、ファイルを期待どおりに列挙しますが、2番目の参照では最後のjpegのみが表示されるのはなぜですか?

+0

'$ f.Name'の代わりに' $ this.Name'を試してみてください。 – Eris

答えて

2

静的、その値が一度を割り当てる必要があるプロパティを作成するScriptPropertyメンバーを使用しないでください - 代わりに、NotePropertyメンバーを使用します。

Get-ChildItem *.txt | ForEach-Object { 
    [pscustomobject] @{ 
    fileName = $_.Name 
    datumN = python face_detect_batch.py $_.Name 
    } 
} | Export-Csv t.csv 
  • [pscustomobject] @{ ... }がどのようにハッシュテーブルリテラルを介して間接的にカスタムオブジェクトを定義するために使用されます。キーの

  • python face_detect_batch.py $_.Name /プロパティdatumN単にワンタイム動作として、オブジェクトはに構成されている時に、すべての入力ファイル名pythonを呼び出し、プロパティdatumN結果を格納します。得[pscustomobject]インスタンスの

  • 特性は、すなわち、静的値暗黙及びタイプNotePropertyの不変です。あなたがを試してみました何については


ScriptPropertyメンバーを作成することで、あなたはにプロパティがアクセスされるたびに実行されるコード作品を割り当てています。したがって、それ以降でのみ、一度にあなたのオブジェクトは、その.datumNプロパティがであることをExport-Csvによってエクスポートされる

$f最後を含むようにたまたまその時点で、スクリプトブロックは、その後を実行させる、を取得し反復の値。

関連する問題