2016-09-16 13 views
0

私はPSで非常に奇妙な状況に遭遇しました。変数を-Filterに渡す方法

私が使用しているスクリプトでは、いくつかのメールボックスをプルバックして$mailboxesに格納するコマンドレット(Get-Mailbox)があります。

次に、これを次のようにループして、一致するADアカウントを見つけます。

foreach ($user in $mailboxes) { 
    Get-ADUser -Filter {UserPrincipalName -eq $user.UserPrincipalName} 
} 

私はそれが$userのプロパティUserPrincipalNameを見つけることができないと言って、このITエラーを実行します。

私はスクリプトをデバッグし、完全にテストしました。私が$user.UserPrincipalNameと入力すると、エラーが発生した時点でUPNのリストが出力され、その日付タイプは文字列なので、プロパティは存在し、データがあります。

何らかの理由で-Filterが変数$userを見ることができないという結論に達しました。私が聞いた{}括弧内のように変数が分離されているようです。しかし、私はそれが動作するようにコードを変更する場合。これは私の問題を修正しますが

foreach ($user in $mailboxes) { 
    $name = $user.UserPrincipalName 
    Get-ADUser -Filter {UserPrincipalName -eq $name} 
} 

私は、最初の例が動作しない理由を学ぶしたいと思います。誰でも説明できますか?

Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox 

が、それは、オブジェクトがタイプPSCustomobjectであると言うGet-ADUserコマンドエラー:注目に値する

何かがget-メールボックスが実際に最初のExchange Onlineに接続してのデータ型を返します。私はこれが問題の一部かもしれないと思う。

+0

そう...私はこの記事を編集する方法を見ることはできませんが、私は右上部にタイプミスに気づきました。 $ userlistは$ mailboxesと言うべきでしょうか、それとももちろん大きな問題を引き起こすでしょう!! – Mucker

答えて

2
Get-ADUser -Filter "userprincipalname -eq '$($user.userprincipalname)'" 

私は理由を知りませんが、構文が行うとのGet-ADUserでは動作しないものについては、ここでいくつかのより多くの議論がありますし、どのようにあなたが完全なユーザーオブジェクトを持つ作品を使用したがされていないスクリプトブロックの構文ここPSCustomObject、と:

http://www.powershellish.com/blog/2015-11-17-ad-filter

+0

私はそれについて知っています、私は代わりに探していないので、私はちょうど私のポストにそれを置かなかったが、私はそれを失敗しようとすると失敗します。とにかくその提案に感謝します。 – Mucker

+0

答えの中のリンクを見てください。 [関連](http://stackoverflow.com/a/34029622/1630171)。 –

関連する問題