PS ここでは初心者ですが(すぐに明らかになります)、改善するために一生懸命努力しています. 私の Exchange 2010 環境では、膨大な数の .pst ファイルをインポートおよびエクスポートしています。多くはランダムにキューに入れられず、キューに入れられなくなると、ソース ファイルを並べ替えて、再実行する必要があるファイルを判断するのは非常に面倒なので、それを行うスクリプトを作成しようとしています。
最初に、pst ファイルのリストに対して dir を実行し、関連するアカウントのエイリアスを変数に入力します。
$vInputlist = dir $vPath -Filter *.pst |%{ get-mailbox -Identity $_.basename| select alias}
次に、キューに正常に登録されたすべてのファイル/アカウントのエイリアスを変数に入力します。
$vBatch = foreach ($a in (Get-MailboxImportRequest -BatchName $vBatchname)) {get-mailbox $a.mailbox | select alias}
次に、2 つの配列を比較して、再度キューに入れる必要があるファイルを確認します。
foreach($should in $vInputlist){if ($vBatch -notcontains $should){Write-Host $should ""}}
単純に見えますが、場合によっては、配列内の値が一致しない、または一致しないことがあります。-contains と -notcontains の両方を試しました。変数を画面やcsvファイルにエクスポートするなど、途中でいくつかの健全性チェックを行いましたが、データは問題ないようです。
たとえば、$vInputlist が最初に入力されたときに、それを画面に送信すると、次のようになります。
Alias
MapiEnableTester1.psiloveyou.com
MapiEnableTester2.psiloveyou.com
MapiEnableTester3.psiloveyou.com
MapiEnableTester4.psiloveyou.com
それでも、上に表示した最後のコード行 (..write-host $should,"") は次のように出力します: @{Alias=MapiEnableTester1.psiloveyou.com} @{Alias=MapiEnableTester2.psiloveyou.com} @{Alias=MapiEnableTester3 .psiloveyou.com} @{Alias=MapiEnableTester4.psiloveyou.com}
(これらはすべて列として表示されますが、ここでそのように表示されない理由はわかりません)
このように配列を宣言しようとしました $vInputlist = @()
エイリアスを検索する代わりに、.replace を使用して $_.basename から .pst を消去してみました
指が青くなるまで配列の比較を検索しましたが、比較が間違っているとは思いません。これらの変数をどのように入力しても、データを破損または変更しているように見えるため、データが単純に一致しているように見えますしません。
どんな助けでも大歓迎です。ティア