Powershell:将对象转换为字符串

时间:2012-06-13 16:13:45

标签: powershell

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

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

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

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

我想将这些转换后的字符串放入不同的数组中,然后进行比较。这将是一个动态的信息存储列表,以进行比较。但也许这不是最好,最有效的方式。任何人都有关于尝试进行这种比较的最佳方法的建议,就像现在我在这里将苹果与橙子进行比较。

3 个答案:

答案 0 :(得分:9)

很难说这是否可以在没有看到第二部分的情况下进行优化......

但是很容易获得一系列标识,要么在select上使用-ExpandProperty,要么使用foreach {$ _。Identity}而不是select:

$allIS = Get-MailboxDatabase | ? { $_.name -notlike "*Users*" } | select -expand Identity
$allIS = Get-MailboxDatabase | ? { $_.Name -notlike '*Users*' | foreach { $_.Identity}

HTH 巴特克

答案 1 :(得分:1)

为更多Powershelly答案编辑:

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

在功能上与我的原始答案相同,但使用foreach将输出管道传输到%循环,这是我想要进入的习惯。

先前的回答:

$isNames = @()

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

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

答案 2 :(得分:0)

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

$allIS = (Get-MailboxDatabase | ? { $_.name -notlike "*Users*" }).Identity