防止PowerShell管道中出现额外的空白

防止PowerShell管道中出现额外的空白,powershell,powershell-2.0,exchange-server,exchange-server-2010,Powershell,Powershell 2.0,Exchange Server,Exchange Server 2010,我正在尝试将本地Exchange 2010环境中的邮箱(不再需要)归档到远程服务器共享目录中的PST文件。我的问题是,我无法在PowerShell中找到适当的语法,以便在某种程度上自动化此过程。我所做的最接近它的工作是在我的PowerShell命令中用空格替换单引号 因此,我尝试在一台Exchange 2010服务器上从PS运行以下内容(作为示例): Get-Mailbox test.user | Where {$_.OrganizationalUnit -eq "domain.com/User

我正在尝试将本地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之前也有一个空格。我尝试过使用单引号和双引号,我改变了引号的位置,使用了转义符,等等,但我一直无法找出我遗漏了什么。示例中的单引号似乎被一个空白字符(我需要删除它)所取代。该命令应如下所示(文件路径中没有空格):


Q:如何通过PS管道传递变量$\别名,以便文件路径中的名称不包含任何空格。

我的猜测是,
'\\server\share\PSTdir\'$\别名.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[]$($别名)
的第一个结果不是
32
,则第一个字符不是空格字符。

是否尝试使用
trim
?例如,
'$\u0.Alias'.trim()
谢谢-不幸的是,我得到了相同的结果,额外的空格如果使用append操作符会发生什么
'\\server\share\PSTdir\'+$\别名+'.pst'
此[int[]]([char[]]($\别名))的输出是什么?我想知道空格是否有什么不同Hanks David-尝试过,但是追加只在输出中添加了追加符号(+)。是的,成功了。我使用了
“\\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";
}