2012-06-13 22 views
6

Tenemos tiendas de información de Exchange que comienzan con UsersA-B, UsersC-D, etc., y otras que están fuera de esa convención de nomenclatura.Powershell: Convierta un objeto en una cadena

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

Buscaré una tienda de información actual de usuarios, y luego intentaré hacer una comparación en la matriz $ allIS. Si coincide, haz algo de acción.

Cuando la salida el valor de $ Allis [0] por ejemplo, devuelve @ {Identidad = MSCCR \ CEO \ CEO}

me gustaría lanzar esas cadenas convertidas en una matriz diferente, y luego hacer la comparación Esto sería tener una lista dinámica de tiendas de información para comparar. Pero tal vez esta no sea la mejor manera, la más eficiente. Alguien tiene sugerencias sobre cuál sería la mejor manera de tratar de hacer esta comparación, ya que ahora estoy comparando manzanas con naranjas aquí.

+0

Hice un Split-Path en la variable $ allIS y pude hacer una concatenación para hacer la comparación de cadenas. Probablemente no sea una forma elegante de hacerlo, pero funciona. – cluckinchicken

+0

Este '$ allIS | % {[string] $ _. Identity} 'convertirá todos los objetos de la matriz en cadenas. ¿Es eso lo que quieres? – Gebb

+0

Sí, eso también lo hace! Gracias Gebb! – cluckinchicken

Respuesta

9

difícil saber si eso se podría optimizar w/o ver segunda parte ...

pero es bastante fácil de conseguir matriz plana de las identidades, ya sea para uso -ExpandProperty en seleccionar o usar foreach {$ _. identidad} en lugar de select:

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

HTH Bartek

+0

Juro que ya había probado esas dos opciones antes, pero bueno, todo bien ahora. Gracias BartekB! – cluckinchicken

+0

-expand trabajado para mí, gracias! – rusty009

1

Editado para una respuesta más Powershelly:

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

funcionalmente lo mismo que mi respuesta original, pero canaliza la salida de un bucle foreach usando % lugar, que es un hábito que estoy tratando de conseguir.

respuesta previa:

$isNames = @() 

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

que le da una simple matriz de sólo los nombres de los almacenes de información, como cadenas en lugar de objetos.

0

Cuando intenta utilizar la "propiedad del operador eliminar la referencia" '' para una propiedad que no es miembro de la clase de matriz, en su lugar desreferenciará cada elemento de la matriz.

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