は、下の3つのスクリプトの比較:Get-ProcessからCountプロパティを使用してかなりゼロの値を返す方法
サンプル1
$a = GPS | Where {$_.ProcessName -Match 'AcroRd32'}
$a
$a.Count
If ($a.Count -Eq 0)
{
Echo "Adobe Reader is Off"
}
Else
{
Echo "Adobe Reader is On"
}
# If Adobe Reader is not running, how come 0 (zero) is not returned?
# This is prettier, should I use it? Or does it slow down performance?
サンプル2
$a = GPS AcroRd32
$a
$a.Count
If ($a.Count -Eq 0)
{
Echo "Adobe Reader is Off"
}
Else
{
Echo "Adobe Reader is On"
}
# If Adobe Reader is not running, how come 0 (zero) is not returned?
# This is uglier, but it doesn't have to pipe any output, so does it have any performance gains?
サンプル3
GPS AcroRd32 | Measure | Select -Expand Count
# 0 (zero) is returned, but with an ugly Error
私は私の問題の一部は、それがVBSだように、私はPowerShellを処理することだということだと思います。この方法/スタイルでコードを書くと、通常はゼロの整数値が返され、エラーは発生しません(Adobe Readerがオフの場合)。 の内容プログラムのインスタンスが実行されていないことをPowerShellがチェックする方法はありますか?コメントのパフォーマンスに関する質問は、「PowerShell Way」の質問に続くものです。
P.S.正直言って、3番目のサンプルから返されたエラーメッセージは何も壊れませんでした。ちょうど醜いので、実用的な使い方ではないので、私は本当の問題は私が美学のための吸盤にすぎないと思うことです。^
最初のサンプルの最初の変数の代入可能との組み合わせで '@()'演算子それはきれいで機能的です - '$ a = @(GPS | Where {$ _。ProcessName -Match 'AcroRd32'})'。懐疑的な衝動を満たすために、私は質問する必要があります。美学のための努力( 'GPS'から' Where'へのパイプ)は '$ a = @(GPS AcroRd32)'と比較して性能低下を引き起こしますか?もしそれがあったとしても、私はそれが非常に小さく、われわれに気付かれないことに気づいていますが、私はまだ分かりませんので、私は自分自身を少し無知にすることができますXD – Stisfa
私はこれを '遠い'プロセスについて測定しました: '@ ) '〜1.6 msec。 '@(Get-Process | {$ _。ProcessName -eq 'far}})'〜6.8ミリ秒です。私の経験 'Where-Object'と' ForEach-Object'は基本的に非常に遅いので、スクリプトで避けています(V2.0ではいつでも可能です)。しかし、彼らは入力時にコマンドラインでまだ便利です。 –
ところで、 '@(GPS AcroRd32)'と一緒に行くと、プロセスが存在しないときにエラーの準備が整うでしょう。エラーが発生すると遅くなるか、エラー設定が* Stop *の場合は失敗する可能性があります。エラーを避けるために、このトリックを使用することができます:http://stackoverflow.com/questions/4362275/powershell-check-if-item-exists-without-an-error-if-it-doesnt/4364807#4364807。それで '@(GPS [A] croRd32)'がパフォーマンスに最適なはずです。 –