【发布时间】:2013-03-08 18:17:32
【问题描述】:
PS noob 在这里(很快就会很明显),但努力变得更好。在我的 Exchange 2010 环境中,我导入和导出大量 .pst 文件。许多人会随机无法排队,一旦他们不在队列中,对源文件进行排序以确定哪些需要再次运行是非常乏味的,所以我正在尝试编写一个脚本来完成它。
首先我在 pst 文件列表上运行一个目录,并用帐户的关联别名填充一个变量:
$vInputlist = dir $vPath -Filter *.pst |%{ get-mailbox -Identity $_.basename| select alias}
然后我用所有成功排队的文件/帐户的别名填充一个变量:
$vBatch = foreach ($a in (Get-MailboxImportRequest -BatchName $vBatchname)) {get-mailbox $a.mailbox | select alias}
然后我比较两个数组,看看哪些文件需要重新排队:
foreach($should in $vInputlist){if ($vBatch -notcontains $should){Write-Host $should ""}}
看起来很简单,但数组中的值永远不会匹配,或者不匹配,视情况而定。我已经尝试过 -contains 和 -notcontains。我已经进行了一些完整性检查,例如将变量导出到屏幕和/或 csv 文件,并且数据看起来很好。
例如,当第一次填充 $vInputlist 时,我将它发送到屏幕,它看起来像这样:
Alias
MapiEnableTester1.psiloveyou.com
MapiEnableTester2.psiloveyou.com
MapiEnableTester3.psiloveyou.com
MapiEnableTester4.psiloveyou.com
然而,我在上面显示的最后一行代码 (..write-host $should,"") 将输出以下内容: @{别名=MapiEnableTester1.psiloveyou.com} @{别名=MapiEnableTester2.psiloveyou.com} @{别名=MapiEnableTester3.psiloveyou.com} @{Alias=MapiEnableTester4.psiloveyou.com}
(这些都显示为一列,不知道为什么它们不会在这里显示)
我尝试过像这样声明数组,$vInputlist = @()
我尝试过使用 .replace 清除 $_.basename 中的 .pst 而不是搜索别名
我已经搜索了比较数组,直到我手指发青,我认为我的比较没有错,我相信无论我如何填充这些变量,我都会破坏或更改数据,因此看起来匹配数据根本没有。
任何帮助将不胜感激。 TIA
【问题讨论】:
标签: arrays powershell contains