次のコマンドを使用してパイプラインを実行します。パイプラインのセマンティクスがWhere-Objectに伝播されない
.\Find-CalRatioSamples.ps1 data16 `
| ? {-Not (Test-GRIDDataset -JobName DiVertAnalysis -JobVersion 13 -JobSourceDatasetName $_ -Exists -Location UWTeV-linux)}
第1のスクリプトは私のカスタムスクリプトで、非常に高速です(ミリ秒)。 2番目のコマンドは私が書いたカスタムコマンドです(https://github.com/LHCAtlas/AtlasSSH/blob/master/PSAtlasDatasetCommands/TestGRIDDataset.cs参照)。それは非常に遅いです。
実際、入力の各行を処理する速度がそれほど遅くはありません。入力の最初の行が処理される前の設定は非常に高価です。しかし、それは非常に迅速に行われます。したがって、すべての高価なコードは一度実行され、新しいパイプライン入力ごとにかなり高速のコードのみを実行する必要があります。
残念ながら、私はしたいときは? {}上記のように、PowerShellは前と同じようにパイプラインを保持しないようです。これは今、私にコマンドを入力の各行に新鮮な時間と呼んで、コマンドが各行のすべての設定をやり直させるようにします。
パイプラインの呼び出し方法を変更することはできますか?または、これを防ぐために私のコマンドレットをどのようにコード化したのでしょうか?または、これは単なるWhere-Objectの仕組みなので、私は立ち往生していますか?
は - 福袋のビットのように思えるが、よさそうです。ここでは後でこの質問に来る人のための古いブログ投稿があります:https://blogs.technet.microsoft.com/heyscriptingguy/2011/11/18/use-the-powershell-passthru-parameter-and-get -back-objects / – Gordon