2012-06-13 21 views
6

में कनवर्ट करें हमारे पास एक्सचेंज इन्फो स्टोर हैं जो उपयोगकर्ता ए-बी, उपयोगकर्तासी-डी, आदि से शुरू होते हैं, और फिर कुछ नामकरण सम्मेलन के बाहर होते हैं।पावरहेल: किसी ऑब्जेक्ट को स्ट्रिंग

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

मैं वर्तमान उपयोगकर्ता जानकारी स्टोर देखता हूं, और उसके बाद $ allIS सरणी पर तुलना करने का प्रयास करता हूं। यदि यह मेल खाता है, तो कुछ कार्रवाई करें।

जब मैं उत्पादन $ आलीस का मूल्य [0] उदाहरण के लिए, यह @ {पहचान = MSCCR \ सीईओ \ सीईओ} रिटर्न

मैं एक अलग सरणी में उन परिवर्तित तार फेंक करना चाहते हैं, और उसके बाद तुलना करो। इसके खिलाफ तुलना करने के लिए जानकारी स्टोर की गतिशील सूची होगी। लेकिन शायद यह सबसे अच्छा, सबसे प्रभावी तरीका नहीं है। किसी के पास इस तुलना करने का प्रयास करने का सबसे अच्छा तरीका क्या है, इस बारे में कोई सुझाव है, क्योंकि अभी मैं सेब को तुलना में संतरे से तुलना कर रहा हूं।

+0

मैंने $ AllIS चर पर एक स्प्लिट-पथ किया और स्ट्रिंग तुलना करने के लिए एक संयोजन करने में सक्षम था। शायद इसे करने का एक शानदार तरीका नहीं है, लेकिन यह काम करता है। – cluckinchicken

+0

यह '$ allIS | % {[string] $ _। पहचान} 'सरणी में सभी ऑब्जेक्ट्स को तारों में परिवर्तित कर देगा। क्या तुम यही चाहते हो? – Gebb

+0

हाँ, यह भी करता है! धन्यवाद Gebb! – cluckinchicken

उत्तर

9

हार्ड बताने के लिए ...

लेकिन यह बहुत पहचान का फ्लैट सरणी होना आसान है, या तो चयन पर -ExpandProperty उपयोग करें, या foreach {$ का उपयोग _। पहचान} का चयन करने के बजाय:

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

HTH Bartek

+0

मैं कसम खाता हूं कि मैं पहले से ही उन दोनों विकल्पों को आजमाया था, लेकिन ओह ठीक है, अब सब अच्छा है। धन्यवाद BartekB! – cluckinchicken

+0

-expand मेरे लिए काम किया, धन्यवाद! – rusty009

1

एक और अधिक Powershelly जवाब के लिए संपादित:

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

कार्यात्मक अपने मूल जवाब के रूप में एक ही है, लेकिन पाइप एक foreach पाश बजाय % का उपयोग, जो एक आदत मैं पाने के लिए कोशिश कर रहा हूँ है उत्पादन।

पहले जवाब:

$isNames = @() 

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

है कि आप केवल जानकारी स्टोर के नामों की एक सरल सरणी देता है, वस्तुओं के बजाय तारों के रूप में। कि अगर ओ देखकर 2 हिस्सा अनुकूलित किया जा सकता है w/

0

जब आप "संपत्ति भिन्नता ऑपरेटर" इस्तेमाल करने की कोशिश '।' ऐसी संपत्ति के लिए जो सरणी वर्ग का सदस्य नहीं है, यह इसके बजाय सरणी के प्रत्येक तत्व को अव्यवस्थित करेगा।

$allIS = (Get-MailboxDatabase | ? { $_.name -notlike "*Users*" }).Identity 
संबंधित मुद्दे