1. ホーム
  2. powershell

[解決済み] PowerShell 'Or' ステートメント

2022-03-02 20:45:56

質問

Active Directoryを経由して、ある条件を満たすユーザーを取得しようとしています。マネージャーAかマネージャーBのどちらかを持つユーザーを取得したいのですが、or文の実装方法がよくわかりません。以下は私のコードです。

Get-ADUser -Filter * -Properties country, extensionattribute9 | if (extensionattribute9 -eq 'Smith, Joe') or (extensionattribute9 -eq 'Doe, John') {select extensionsattribute9, country}

このコードでは extensionattribute9 これはユーザーのマネージャーを示すものです。

を使用することも試みました。 where の代わりに if が、無駄だった。

解決方法は?

演算子は -or ではなく or . 参照 about_Logical_Operators . また if ステートメントは、パイプラインから読み込まれません。パイプラインから読み込まないように if ステートメントを ForEach-Object のループになります。

... | ForEach-Object {
  if ($_.extensionattribute9 -eq 'Smith, Joe' -or $_.extensionattribute9 -eq 'Doe, John') {
    $_ | select extensionsattribute9, country
  }
}

を使用するか、または Where-Object ステートメントで代用できます。

... | Where-Object {
  $_.extensionattribute9 -eq 'Smith, Joe' -or
  $_.extensionattribute9 -eq 'Doe, John'
 } | Select-Object extensionsattribute9, country

また、プロパティ名単体では使用できません。使用するのは 現在のオブジェクト変数 ( $_ ) を使って、現在のオブジェクトのプロパティにアクセスすることができます。

ある属性が指定された数の値のいずれかを持っているかどうかを確認するために -contains 演算子を使えば、複数の比較は不要です。

'Smith, Joe', 'Doe, John' -contains $_.extensionattribute9