2012-06-13 54 views
6

Chúng tôi có Cửa hàng thông tin trao đổi bắt đầu bằng UsersA-B, UsersC-D, v.v ... và sau đó một số bên ngoài quy ước đặt tên đó.Powershell: Chuyển đổi đối tượng thành chuỗi

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

Tôi sẽ tra cứu kho thông tin người dùng hiện tại, sau đó thử so sánh trên mảng $ allIS. Nếu nó phù hợp, làm một số hành động.

Khi tôi ra giá trị của $ Allis [0] ví dụ, nó sẽ trả @ {nhận dạng = MSCCR \ CEO \ CEO}

Tôi muốn ném những chuỗi chuyển đổi thành một mảng khác nhau, và sau đó so sánh. Điều này sẽ có một danh sách năng động của các cửa hàng thông tin để so sánh. Nhưng có lẽ đây không phải là cách tốt nhất, hiệu quả nhất. Bất kỳ ai cũng có đề xuất về cách tốt nhất để thử so sánh này, như bây giờ tôi đang so sánh táo với cam ở đây.

+0

Tôi đã tạo một đường phân tách trên biến $ allIS và có thể thực hiện một phép nối để thực hiện so sánh chuỗi. Có lẽ không phải là một cách thanh lịch để làm điều đó, nhưng nó hoạt động. – cluckinchicken

+0

This '$ allIS | % {[string] $ _. Identity} 'sẽ chuyển đổi tất cả các đối tượng trong mảng thành chuỗi. Đó là điều bạn muốn? – Gebb

+0

Vâng, điều đó cũng vậy! Cảm ơn Gebb! – cluckinchicken

Trả lời

9

Khó có thể nói nếu có thể được tối ưu hóa w/o thấy phần 2 ...

Nhưng nó khá dễ dàng để có được mảng phẳng của bản sắc, hoặc sử dụng -ExpandProperty trên lựa chọn, hoặc sử dụng foreach {$ _. sắc} thay vì chọn:

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

HTH Bartek

+0

Tôi thề tôi đã thử cả hai tùy chọn này trước đây, nhưng ồ, tất cả đều tốt. Cảm ơn BartekB! – cluckinchicken

+0

-expand đã làm việc cho tôi, cảm ơn! – rusty009

1

Edited cho hơn Powershelly câu trả lời:

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

Về mặt chức năng giống như câu trả lời ban đầu của tôi, nhưng ống đầu ra vào một vòng lặp foreach sử dụng % thay vào đó, đó là một thói quen Tôi đang cố gắng để có được vào.

câu trả lời trước:

$isNames = @() 

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

Cung cấp cho bạn một mảng đơn giản chỉ là tên của các cửa hàng thông tin, như dây đàn thay vì các đối tượng.

0

Khi bạn cố gắng sử dụng "toán tử tham chiếu tài sản" '' đối với một thuộc tính không phải là thành viên của lớp mảng, nó sẽ thay thế cho mỗi phần tử của mảng.

$allIS = (Get-MailboxDatabase | ? { $_.name -notlike "*Users*" }).Identity 
Các vấn đề liên quan