0

Exchange 2010 SP1 サーバーに対して次の PowerShell コマンドを実行しようとしています。

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
New-MailboxExportRequest -Mailbox $objItem -FilePath \\server\share$\"$objItem".pst
}

これを行うと、次のエラーが表示されます。

このリクエストの保存に適したデータベースが見つかりませんでした。+ CategoryInfo: InvalidArgument: (domain.com....d/John Doe:MailboxOrMailUserIdParameter) [New-MailboxExportRequest]、MailboxDatabase...manentException + FullyQualifiedErrorId: 9322CB6D、Microsoft.Exchange.Management.RecipientTasks.NewMailboxExportRequest

私がやろうとしているのは、AD ユーザー全体を検索し、Office フィールドに ExportPST という文字列を持つユーザーを見つけてから、コマンド New-MailboxExportRequest をエクスポートして、返された各ユーザーのユーザーのメールボックスの内容全体を PST にエクスポートすることです。

上記に Write-Host を追加すると、出力される値は正しくなります。

New-MailboxExportRequest -Mailbox jdoe -FilePath "\\server\share$\John Doe.pst"

出力には、 -FilePath " と \ の間に余分なスペースも含まれています。上記の問題が解決されると問題が発生すると思います。この余分なスペースを追加せずに文字列に連絡する方法はありますか?

ありがとう、

マット

4

2 に答える 2

2

あなたの引用は少しずれていると思います。二重引用符で囲まれた文字列展開は、変数部分だけでなく、文字列を完全に囲む場合に機能します。

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
  New-MailboxExportRequest -Mailbox $objItem -FilePath "\\server\share$\$objItem.pst"
}

.NET 文字列の書式設定/置換を使用する代替構文を次に示します。

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
  New-MailboxExportRequest -Mailbox $objItem -FilePath ('\\server\share$\{0}.pst' -f $objItem)
}

トラブルシューティングやデバッグを容易にするために、ファイル パスを変数に割り当て、その変数を-FilePathパラメーターに渡すことができます。そうすれば、どの値が渡されているかを正確に確認できます。

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
  $FilePath = '\\server\share$\{0}.pst' -f $objItem;
  Write-Host -Object ('$FilePath value is: {0}' -f $FilePath);
  New-MailboxExportRequest -Mailbox $objItem -FilePath $FilePath;
}
于 2012-03-14T13:21:23.377 に答える
0

あなた$objItemができる文字列の場合:

-FilePath "\\server\share$\${objItem}.pst"

これを行うことで、それが文字列であるかどうかを知ることができます:

$objItem.GetType().FullName

文字列でなくても、オブジェクトToString()メソッドが必要な値を提供する場合は、PowerShell が自動的ToString()にオブジェクトのメソッドを呼び出して文字列に配置するため、機能する可能性があります。したがって、これで必要な値が得られる場合は、$objItem.ToString()それを使用することもできます。ただし、アクセスする必要がある $objItem.Name のようなプロパティがある場合は、文字列連結、部分式、または .NET 文字列フォーマットを使用する必要があります。

  • 連結: -FilePath ("\\server\share$\" + $objItem.Name + ".pst")
  • 部分式: -FilePath "\\server\share$\$($objItem.Name).pst"
  • .NET 文字列のフォーマット: -FilePath ("\\server\share$\{0}.pst" -f $objItem.Name)
于 2012-03-14T13:30:29.967 に答える