9

我们有以 UsersA-B、UsersC-D 等开头的 Exchange 信息存储,然后是一些超出该命名约定的存储。

$allIS = Get-MailboxDatabase |
             Where { $_.name -notlike "*Users*" } |
             Select Identity

我将查找当前用户的信息存储,然后尝试对 $allIS 数组进行比较。如果匹配,请执行一些操作。

例如,当我输出 $allIS[0] 的值时,它返回@{Identity=MSCCR\CEO\CEO}.

我想将这些转换后的字符串放入不同的数组中,然后进行比较。这将有一个动态的信息存储列表进行比较。但也许这不是最好、最有效的方法。尝试进行这种比较的最佳方法是什么,因为现在我在这里比较苹果和橙子?

4

3 回答 3

12

如果没有看到第二部分,很难判断是否可以优化......

但是很容易获得一组平面的身份。要么-ExpandProperty在选择上使用,要么使用foreach { $_.Identity }而不是选择:

$allIS = Get-MailboxDatabase | ? { $_.name -notlike "*Users*" } | select -expand Identity
$allIS = Get-MailboxDatabase | ? { $_.Name -notlike '*Users*' | foreach { $_.Identity}
于 2012-06-13T17:29:06.170 回答
1

强大的方式

$isNames = @()
$allIS = Get-MailboxDatabase | 
    Where { $_.name -notlike "*Users*" } | 
    Select Identity | 
    %{ $isNames += $_.name }

它使用管道将输出传递给foreach循环%

更程序化的方式

$isNames = @()

foreach ($is in $allIS)
{
    $isNames += $is.identity
}

这为您提供了一个仅包含信息存储名称的简单数组,作为字符串而不是对象。

于 2012-06-13T16:47:36.380 回答
0

当您尝试使用“属性取消引用运算符”'。对于不是数组类成员的属性,它将改为取消引用数组的每个元素。

$allIS = (Get-MailboxDatabase | ? { $_.name -notlike "*Users*" }).Identity
于 2016-07-20T19:44:44.593 回答