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-M ailboxExportRequest], 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

即使它不是字符串,如果 objectsToString()方法提供了您需要的值,它仍然可以工作,因为 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 回答