1

実行中のクエリに関するいくつかのオプションを提供するスクリプトを作成しようとしています。get-wmiobject にある「Where { }」フィルターを時々無効にできるようにしたいと考えています。しかし、式で変数を使用することはできません...したがって、これは機能しません::

gwmi -class win32_product | $whereEnabled | select name, version

別の式を作成して if/else ループを使用せずに、「Where」フィルターを有効/無効にできますか?

要求された完全な Get 式は次のとおりです。

get-wmiobject -class win32_product -computer $PC | where {$ignore -notcontains $_.IdentifyingNumber} | Select IdentifyingNumber, Name | sort-object IdentifyingNumber | export-csv -Delimiter `t -NoTypeInformation -Append -encoding "unicode" -path $logfile

$ignore は、既知の必要なアプリを含むテキスト ファイルで、IdentifyingNumber によって、デバイス上に表示されます。時々、すべてのアプリのリストを取得する必要があり、式のこの部分を「無効」にしたいと考えています。

4

3 に答える 3

0

私の頭に浮かんだのはこのようなものだけです、それはただのアイデアです:

 [scriptblock]$w = {  $_.caption -match 'micro' }

gwmi -class win32_product | ? $w | select caption

スクリプトブロックは次のように変更できます。

 [scriptblock]$w = {  $true } #edited after @mjolinor comment

where-objectフィルターをシミュレートします。

于 2013-03-18T13:47:10.210 に答える
0

whereパイプラインの一部を次のように変更します。

where { ($whereEnabled -and $ignore -notcontains $_.IdentifyingNumber) -or !$whereEnabled }

コマンド全体が次のようになります。

get-wmiobject -class win32_product -computer $PC | where { ($whereEnabled -and $ignore -notcontains $_.IdentifyingNumber) -or !$whereEnabled } | Select IdentifyingNumber, Name | sort-object IdentifyingNumber | export-csv -Delimiter `t -NoTypeInformation -Append -encoding "unicode" -path $logfile

trueの場合$whereEnabledはチェックを行い、そうでない場合は行いません。

于 2013-03-18T13:55:04.110 に答える
0

フィルタを使用することもできます。このような:

filter whereEnabled {
    param($list)

    if ($list -notcontains $_.IdentifyingNumber) {
        $_
    }
}

# If $ignore is already loaded from file
gwmi -class win32_product | whereEnabled $ignore | select name, version

# Or
gwmi -class win32_product | whereEnabled (Get-Content c:\myignorelist.txt) | select name, version

ファイルが空/ $ignorenullの場合、何も除外されません。

于 2013-03-18T15:55:09.423 に答える