foreachクエリ内でコマンドレットを実行してください
-
13-12-2019 - |
質問
私のExchange 2010 SP1 Serverに対して次の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-M AilboxExportRequest]、 MailboxDatabase ... ManentException + FullQualifiedErrorID:9322CB6D、Microsoft.Exchange.Management.RecipientTasks.NewMailBoxExportRequest
私のことを試みているのは私の広告ユーザーを検索し、Officeフィールドにstring exportpstを持つユーザーを見つけて、コマンドの新しいMailboxExportRequestをエクスポートして、ユーザーのメールボックスの内容全体をPSTにエクスポートします。ユーザーが返品しました。
上記の書き込みホストを追加すると、出力された値は正しいです。
new-mailboxexportRequest --mailbox jdoe -filepath "\\ server \ share $ \ john doe.pst"
出力には、-filepath "の間に追加のスペースも含まれています。この余分なスペースを追加せずに文字列をコンタクトする方法はありますか?
ありがとう、
マット
解決
あなたの引用符は少しオフです。二重引用符列拡張は、変数部分だけでなく、文字列を完全に囲むと機能します。
$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;
}
. 他のヒント
$objItem
が実行できる文字列の場合:
-FilePath "\\server\share$\${objItem}.pst"
.
これを行うことで文字列であるかどうかを確認できます。
$objItem.GetType().FullName
.
PowerShellがオブジェクトのToString()
メソッドを呼び出して、PowerShellがオブジェクトのToString()
メソッドを呼び出して文字列に配置するため、
弦が必要な値を提供する場合でも機能します。それで、これがあなたが望む価値を与えるならば:$objItem.ToString()
それからそれを使うことができます。ただし、アクセスする必要がある$ objitem.nameのようなプロパティがある場合は、String連結、サブフェリック、または.NET文字列フォーマットを使用する必要があります。
- 連結:
-FilePath ("\\server\share$\" + $objItem.Name + ".pst")
- subExpression:
-FilePath "\\server\share$\$($objItem.Name).pst"
- .NET文字列のフォーマット:
-FilePath ("\\server\share$\{0}.pst" -f $objItem.Name)