防止PowerShell管道中的额外空格

时间:2014-10-16 16:27:23

标签: powershell powershell-v2.0 exchange-server exchange-server-2010

我正在尝试将内部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管道传递变量 $ _。别名,以便文件路径中的名称不会包含任何空格。

1 个答案:

答案 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,则第一个字符不是空格字符。