我正在尝试将内部Exchange 2010环境中的邮箱(不再需要)存档到远程服务器共享上的目录中的PST文件。我的问题是我无法在PowerShell中找出正确的语法来使这个过程有些自动化。我最接近它的工作是在我的PowerShell命令中用空格替换单引号。
因此,我尝试在我们的一个Exchange 2010服务器上运行以下(作为示例)PS:
Get-Mailbox test.user | Where {$_.OrganizationalUnit -eq "domain.com/Users/TEMP"} | ForEach {New-MailboxExportRequest -Mailbox $_.Alias -FilePath '\\server\share\PSTdir\'$_.Alias'.pst'}
test.user 仅在示例中用作测试邮箱,直到我可以计算出使其工作所需的PowerShell语法。一旦语法有效,我将删除单个 test.user 邮箱,让PS通过管道发送所有邮箱。
当我使用该示例时,我可以使用 Get-MailboxExportRequest 检查移动请求的状态。当我检查状态时,我看到文件路径不包含格式正确的文件路径信息。从示例中,这是在PS中格式化命令的一部分:
New-MailboxExportRequest -Mailbox test.user -FilePath \\server\share\PSTdir\ test.user .pst
请注意,“ PSTdir \ test.user ”中现在有一个空格,而“ test.user .pst ”中的.pst前面还有一个空格。我尝试过使用单引号和双引号,我已经改变了引号的位置,使用了转义字符等,但我无法弄清楚我错过了什么。似乎示例中的单引号被替换为空白字符(我需要将其删除)。该命令看起来应该是这样的(文件路径中没有空格):
New-MailboxExportRequest -Mailbox test.user -FilePath \\server\share\PSTdir\test.user.pst
Q :如何通过PS管道传递变量 $ _。别名,以便文件路径中的名称不会包含任何空格。
答案 0 :(得分:1)
我的猜测是'\\server\share\PSTdir\'$_.Alias'.pst'
没有评估你想要的方式。试试这个:"\\server\share\PSTdir\'$($_.Alias.Trim())'.pst"
你应该可以使用它,如果分解更容易阅读:
Get-Mailbox -Identity test.user -OrganizationalUnit 'domain.com/Users/TEMP' | ForEach-Object {
$Alias = $_.Alias.Trim();
New-MailboxExportRequest -Mailbox $Alias -FilePath "\\server\share\PSTdir\'$Alias'.pst";
}
如果您仍然看到空格,那么第一个字符可能不是空格。如果[int[]][char[]]$($_.Alias)
的第一个结果不是32
,则第一个字符不是空格字符。