9

मैं कोड का एक सा है कि इस तरह दिखता है:एडी ऑब्जेक्ट के अस्तित्व की जांच; मैं एक बदसूरत त्रुटि संदेश से कैसे बचूं?

if (Get-ADUser $DN -EA SilentlyContinue) { 
    # Exists 
} else { 
    # Doesn't Exist 
} 

दुर्भाग्य से, जब प्राप्त करें-ADUser डीएन एक उपयोगकर्ता को खोजने में विफल (जो ठीक है, इसका मतलब है ऑब्जेक्ट नाम नहीं लिया जाता है), यह फेंकता ऊपर और एक त्रुटि थूकता है। मुझे पता है कि यह असफल हो जाएगा, यह ठीक है, यही कारण है कि मेरे पास -ErrorAction से SilentlyContinue है। दुर्भाग्यवश ऐसा कुछ नहीं लगता है ... मुझे अभी भी स्क्रिप्ट आउटपुट पर बारफ मिलता है। कोड काम करता है, यह कंसोल के कारण त्रुटि को थूकने के कारण सिर्फ बदसूरत है।

  • क्या यह जांचने का कोई बेहतर तरीका है कि कोई विशेष वस्तु मौजूद है या नहीं?
  • यदि नहीं, तो त्रुटिएक्शन को ठीक से चुप रहने का कोई तरीका है?
+1

एनबी: कोशिश के साथ ... पकड़ समाधान आप अधिक विशिष्ट हो सकता है; यानी नामित अपवादों को पकड़कर। {Get-ADUser $ DN -EA Stop} को पकड़ें [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] {"अच्छी कोशिश करें"} {"अपेक्षित समस्या नहीं"} ' – JohnLBevan

+1

'get-aduser -erroraction' silentlycontinue 'लगता है powerhell-v4.0 में ठीक से काम करने के लिए। –

उत्तर

1

आप वस्तु के अपवाद को पकड़ने के लिए नहीं पाए जाने के चाहते हैं, लेकिन आप अभी भी के लिए असफल करना चाहते हैं एक्सेस जैसे अस्वीकार और अन्य कारणों से, इसलिए आपको पकड़ने के लिए सटीक अपवाद निर्दिष्ट करना होगा।

try { 
    Get-ADUser $DN -ErrorAction Stop 
    # Do stuff if found 
} catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundExce‌​ption] { 
    # Do stuff if not found 
} 

अपवाद प्रकार का निर्धारण, अन्य उपयोग के मामलों में पकड़ने के लिए एक अपवाद पैदा करने के लिए और फिर ऐसा करने के लिए:

$Error[0].Exception.GetType().FullName 

कि के उत्पादन में चला जाता है: पकड़ [डालने अपवाद यहाँ लिखें]

2

ऐसा प्रतीत होता है कि यह आदेश एक स्थायी त्रुटि उत्सर्जित कर रहा है। त्रुटि को संभाल/दबाने के लिए try { ... } catch { ... } का उपयोग करें।

8

यह एक अपवाद है, तो आप सिर्फ इस तरह यह पकड़ने की कोशिश कर सकते हैं:

$user = $(try {Get-ADUser $DN} catch {$null}) 
if ($user -ne $null) { 
    # Exists 
} else { 
    # Doesn't Exist 
} 
+1

यह पूरी तरह से काम करता है। – HostBits

0

मैं इस तरह इस करना होगा:

Get-ADUser | ?{$_.id -eq $DN.id} 

ईद या कुछ अन्य अद्वितीय पहचानकर्ता।

यह उपयोगकर्ता या शून्य को वापस कर देगा और अपवाद को लपेट देगा।

+2

यह काम करता है, लेकिन यदि आपके पास मामूली आकार का एडी भी है तो यह बेहद धीमा है। प्रत्येक ऑब्जेक्ट ला रहा है, फिर फ़िल्टरिंग व्यावहारिक नहीं है। –

+0

हां, यह पुनरावृत्तियों के छोटे सेट के लिए है। असल में यह शै लेवी की लेकिन एक पंक्ति के समान है। –

+0

क्या आप इसके बारे में निश्चित हैं? मैं इस धारणा के तहत था कि सर्वर द्वारा हजारों परिणामों को वापस करने की आवश्यकता को रोकने के लिए, फ़िल्टर को सीधे एलडीएपी क्वेरी के रूप में पारित किया गया था। –

16

एक ही रास्ता मैं एक त्रुटि थूकना के बिना काम करने पाया है फिल्टर पैरामीटर के साथ है:

if (Get-ADUser -Filter {distinguishedName -eq $DN}) { 
    # Exists 
} else { 
    # Doesn't Exist 
} 
+0

मैं '-प्रॉपर्टीज *' कैसे प्राप्त करूं और अभी भी इन त्रुटियों से छुटकारा पा सकता हूं? –

संबंधित मुद्दे