9

非アクティブなコンピューター アカウントをすべて一覧表示するスクリプトを作成しています。結果からいくつかのシステムを除外したいと思います。

除外するすべてのシステムを含むテキスト ファイルがあります (1 行に 1 つのシステム名)。すべてのアイテムは、プロパティ名「name」のオブジェクトに格納されます。したがって、$excluded には以下が含まれます。

name
----
system1
system2

非アクティブなシステムをすべて一覧表示するには、Search-ADAccount コマンドレットを使用します。

$InactiveComputers = Search-ADAccount -AccountInactive -TimeSpan 90 -ComputersOnly | Where {$_.Enabled -eq $true}

もちろん、すべての結果を 1 つずつループすることはできますが、システムを結果から直接除外する簡単な方法はありますか? select-object または where-object で可能だと感じていますが、オブジェクトの結果と比較する方法がわかりません。

4

3 に答える 3

22

タイトルでこれを使用することは基本的に正しかった: "where {_.Name not in $object}"

構文は少し異なります。以下にパイプします

Where { !($_.Name -in $excluded) }

また

Where { $_.Name -notin $excluded }

どちらもコンソールで同じ結果が得られるようです。ハッピーコーディング!

注: PSv2 および v3 でこれをテストしました。

答えを探しているときにこれに出くわし、これに遭遇した他の人のためにこれらのオプションで更新すると考えました。

于 2014-04-14T21:13:46.370 に答える
4

除外ファイルを (csv として) インポートし、-notcontains 演算子を使用します。

$names = Import-csv exclude.txt | Foreach-Object {$_.Name} 

$InactiveComputers = Search-ADAccount -AccountInactive -TimeSpan 90 -ComputersOnly | Where {$_.Enabled -eq $true -and $names -notcontains $_.Name}
于 2012-05-22T08:31:07.123 に答える
1

-notcontainsTechNetの記事)演算子を使用できると思います:

$InactiveComputers = Search-ADAccount -AccountInactive -TimeSpan 90 -ComputersOnly | Where {$_.Enabled -eq $true -and $excluded -notcontains $_.name }
于 2012-05-22T08:33:08.573 に答える