Пример Try / Catch - PullRequest
       2

Пример Try / Catch

0 голосов
/ 14 сентября 2018

Я понимаю, что Stackoverflow не является написанием вашего кода для вас форума, безусловно, но мне очень трудно найти хороший пример try/catch правильного использования в Powershell. Я ознакомился с основами и понимаю теоретическую концепцию, но с исполнением я борюсь.

Вот простой скрипт, который запрашивает Active Directory:

do {
    clear
    Import-Module active*

    "============ WhoIs Lookup ============="
    Write-Host ""
    $who = Read-Host "WhoIs";


    $req = Get-ADUser -Identity $who 


    Write-Host ''
    Write-Host "$who is " -NoNewline
    Write-Host $req.Name -ForegroundColor Cyan
    pause
    } while ($run =1)

Пример ошибки:

Get-ADUser : Cannot find an object with
identity: '5621521' under: 'DC=dcsg,DC=com'.
At C:\Tools\CSOCTools\Who_Is\whoIs.ps1:10
char:12
+     $req = Get-ADUser -Identity $who
+            ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFoun
   d: (5621521:ADUser) [Get-ADUser], ADIde
  ntityNotFoundException
    + FullyQualifiedErrorId : ActiveDirecto
   ryCmdlet:Microsoft.ActiveDirectory.Mana
  gement.ADIdentityNotFoundException,Micr
 osoft.ActiveDirectory.Management.Comman
ds.GetADUser

Как мне catch этот пользователь не найден ошибка?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Простой пример:

try {
  Get-ADUser -Identity “bleh”
}
catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
{
  Write-Warning “AD computer object not found”
}

Для вашего случая:

do {
  clear
  Import-Module active*

  "============ WhoIs Lookup ============="
  Write-Host ""
  $who = Read-Host "WhoIs";

  try {
    $req = Get-ADUser -Identity $who 
  } 
  catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
  {
    Write-Warning “AD user object not found”
    Write-Host ''
    Write-Host "$who is " -NoNewline
    Write-Host $req.Name -ForegroundColor Cyan
  }
  pause
} while ($run =1)

Редактировать: я включил Write-Host в ловушку, когда вы в конце концов пытаетесь сослаться на NULL когда нет объекта.

0 голосов
/ 14 сентября 2018

Я получил очень хороший пример из здесь .Для типов исключений после Catch (где у меня их два) я просто взял их прямо из предоставленного вами сообщения об ошибке.Я не испытывал это много раз в своем опыте, дайте мне знать, если это работает для вас!

Try 
{
    do {
        clear
        Import-Module active*

        "============ WhoIs Lookup ============="
        Write-Host ""
        $who = Read-Host "WhoIs";


        $req = Get-ADUser -Identity $who 


        Write-Host ''
        Write-Host "$who is " -NoNewline
        Write-Host $req.Name -ForegroundColor Cyan
        pause
    } while ($run =1)
}
Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException],[Microsoft.ActiveDirectory.Management.Commands.GetADUser]
{
     # Error message here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...