9

Şöyle kodu biraz var: Al-ADUser DN bir kullanıcıyı bulmak için başarısız olduğundaBir AD nesnesinin varlığını kontrol etme; Çirkin bir hata mesajından nasıl kaçınılırım?

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

Maalesef (ince, o nesne adı alınmaz anlamına gelir), bu atar yukarı ve bir hata çıkar. Başarısız olacağını biliyorum, bu iyi, bu yüzden -ErrorAction - SilentlyContinue var. Ne yazık ki hiçbir şey yapmıyor gibi görünüyor ... Ben hala script çıktısı üzerinde barf almak. Kod çalışır, bu hatadan çıkan konsol nedeniyle çok çirkin.

  • Belirli bir nesnenin var olup olmadığını sınamanın daha iyi bir yolu var mı?
  • Değilse, ErrorAction'ı düzgün şekilde susturmanın bir yolu var mı?
+1

[insert istisna burada yazın] NB: deneyin ... yakalama çözümü ile daha spesifik olabilirsiniz; yani istisnaları yakalayarak. {Get-ADUser $ DN -EA Durdurma} 'yı yakalayın [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] {"güzel deneme"} {"beklenen sorun değil" mesajını alın}} ' – JohnLBevan

+1

' get-aduser -erroraction' silentlycontinue'' görünüyor powershell-v4.0'da düzgün çalışmak. –

cevap

1

Bulunmak olmamak nesnenin durum yakalamak istiyorum, ama yine de başarısız istiyorum erişim reddedildi ve bunun gibi diğer nedenlerden dolayı, yakalanması gereken tam istisnayı belirtmeniz gerekir.

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

bir istisna, diğer kullanım durumları içinde yakalamak neden istisna türünü belirlemek ve daha sonra yapmak için:

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

o çıkışı girer: catch

2

Bu komut bir sonlandırıcı hatası yayar. Hatayı işlemek/bastırmak için try { ... } catch { ... } kullanın.

8

Bu bir istisna, sadece bu gibi yakalamaya deneyebilirsiniz:

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

Bu, mükemmel çalışır. – HostBits

0

böyle yapardı:

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

numarasını veya bazı diğer benzersiz bir tanımlayıcı.

Bu kullanıcı veya null değerini döndürür ve istisnayı saracaktır.

+2

Bu işe yarıyor, ancak orta boyutlu bir AD bile sahibiyseniz çok yavaş. Her nesnenin alınması, ardından filtreleme pratik değildir. –

+0

Evet, bu daha küçük yinelenen gruplar içindir. Aslında Shay Levy'nin ama tek sırayla aynı. –

+0

Bundan emin misin? Sunucu tarafından döndürülmesi gereken binlerce sonucu önlemek için -Filter'in bir LDAP sorgusu olarak doğrudan aktarıldığı izlenimindeydim. –

16

bir hata tükürme olmadan çalışıyor bulduk tek yolu filtre parametresi geçerli:

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

Nasıl '-Properties *' alabilirim ve hala bu hatalardan kurtulurum? –

İlgili konular