Powershell 在ForEach查询中执行cmdlet
我正在尝试对Exchange 2010 SP1服务器运行以下PowerShell命令:Powershell 在ForEach查询中执行cmdlet,powershell,exchange-server-2010,Powershell,Exchange Server 2010,我正在尝试对Exchange 2010 SP1服务器运行以下PowerShell命令: $colItems = Get-Mailbox -Filter {office -eq "ExportPST"} ForEach($objItem in $colItems) { New-MailboxExportRequest -Mailbox $objItem -FilePath \\server\share$\"$objItem".pst } 执行此操作时,我收到错误: 找不到适合存储此请求的数据库。
$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:MailboxOrmalUserIdParameter)[New-M MailboxExportRequest],
MailboxDatabase…manentException
+FullyQualifiedErrorId:9322CB6D,Microsoft.Exchange.Management.RecipientTasks.NewMailboxExportRequest
我试图做的是搜索我的广告用户,在Office字段中找到具有字符串ExportPST的用户,然后导出命令New-MailboxExportRequest,以便为返回的每个用户将用户邮箱的全部内容导出到PST
当我向上面添加写主机时,输出的值是正确的:
新建邮箱ExportRequest-邮箱jdoe-文件路径“\\server\share$\John Doe.pst”
输出在-FilePath“和\”之间还包含一个额外的空间,我想这会在上述问题解决后引起问题。有没有办法在不添加额外空间的情况下联系字符串
谢谢
Matt我认为你的引用有点不恰当。当你完全围绕字符串,而不仅仅是变量部分时,双引号字符串扩展就可以工作
$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
即使它不是字符串,如果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)