在ForEach查询中执行cmdlet



我正在尝试对Exchange 2010 SP1服务器运行以下PowerShell命令:

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

当我这样做时,我收到错误:

找不到适合存储此请求的数据库。+CategoryInfo:InvalidArgument:(domain.com….d/John Doe:MailboxOrMailUserIdParameter)[New-M ailboxExportRequest],邮箱数据库。。。manentException+FullyQualifiedErrorId:9322CB6D,Microsoft.Exchange.Management.RecipientTasks.NewMailboxExportRequest

我尝试在AD用户中进行搜索,找到Office字段中具有字符串ExportPST的用户,然后导出命令New-MailboxExportRequest,将用户邮箱的全部内容导出到每个返回用户的PST中。

当我在上面添加一个写主机时,输出的值是正确的:

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

输出还包括-FilePath"和\之间的额外空间,我想一旦上述问题得到解决,这将导致问题,有没有一种方法可以在不添加额外空间的情况下联系字符串?

谢谢,

Matt

我认为你的引号有点不对。当你完全包围字符串,而不仅仅是变量部分时,双引号字符串扩展就可以了。

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

这里有一个使用.NET字符串格式化/替换的替代语法:

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

为了简化故障排除/调试,可以将文件路径分配给变量,然后将该变量传递到-FilePath参数中。这样你就可以准确地看到哪个值被传入

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
  $FilePath = '\servershare${0}.pst' -f $objItem;
  Write-Host -Object ('$FilePath value is: {0}' -f $FilePath);
  New-MailboxExportRequest -Mailbox $objItem -FilePath $FilePath;
}

如果$objItem是字符串,则可以执行以下操作:

-FilePath "\servershare$${objItem}.pst"

你可以这样做来判断它是否是一个字符串:

$objItem.GetType().FullName

即使它不是字符串,如果对象ToString()方法提供了所需的值,它仍然可能工作,因为PowerShell将自动调用对象的ToString()方法并将其放在字符串中。因此,如果这为您提供了所需的值:$objItem.ToString(),那么您也可以使用它。如果您必须访问类似$objItem.Name的属性,那么您将需要使用字符串串联、子表达式或.NET字符串格式。

  • 连接:-FilePath ("\servershare$" + $objItem.Name + ".pst")
  • 子表达式:-FilePath "\servershare$$($objItem.Name).pst"
  • .NET字符串格式:-FilePath ("\servershare${0}.pst" -f $objItem.Name)

最新更新