我正在尝试对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)