Обработка ошибок и сведение к минимуму вывода сценария для конечного пользователя - PullRequest
1 голос
/ 27 марта 2012

У меня есть скрипт, который просматривает список пользователей (samaccountname):

# Read usersfile to variable
$users = get-content ("users.txt")

# Get current time
$now = $(get-date -uformat "%H:%M %d/%m/%Y")

# Loop through list of users
foreach($user in $users) {

    # Disable user
    Disable-QADUser $user

    # Set informative description
    Set-QADuser $user -Description "Disabled $now"

    # Delete all groupmemberships except "domain users"
    Get-QADGroup -Containsmember $user | where-object { $_.name -ne 'domain users'} | Remove-QADGroupmember

    # Move to "disabled users" group
    move-QADObject $user -NewParentContainer 'contosoc.com/Disabled users'

    # Hide from addresslist
    Set-Mailbox -identity $user -HiddenFromAddressListsEnabled $true

    # Moving mailbox to disabled users database
    Move-Mailbox -Identity $user -TargetDatabase "myserver\mydb" -BadItemLimit 50 -Confirm:$False
}

Я бы хотел:

  • Подавить вывод из разных командлетов и показать только «$ user is OK!» если все в порядке и зарегистрируйте успех в logfile.txt
  • Дисплей "Ошибка!" и команда, которая потерпела неудачу, если не в порядке. И выведите полные сообщения об ошибках в отдельный файл журнала.

Я думал о том, чтобы сделать if(!cmdlettorun) { write-host "Error!" } Но я думаю, что должен быть лучший способ.

Как мне следует правильно обрабатывать ошибки, чтобы я минимизировал отображаемый вывод, но все же позволял бы мне видеть его, если это желательно?

1 Ответ

1 голос
/ 27 марта 2012

Для подавления вывода командлета вы можете направить на out-null или предвосхитить команду:

[void](.. your cmdlets..)

хороший способ для вашей цели - использовать код "лови поднос", как в этом свернутом коде:

$a = $ErrorActionPreference 
$ErrorActionPreference = "SilentlyContinue"

foreach($user in $users) {

try 
{
... yours code ...
$JobStatus = "OK"
}
catch [exception]
{
   $("Error catched: " + $_.Exception.GetType().FullName) | out-file c:\file.log
   $("Error catched: " + $_.Exception.Message) | out-file c:\file.log -append

   $JobStatus = "not OK"
   continue; 
}
finally
{
   write-host "$user is $JobStatus!"
}
  $ErrorActionPreference = $a
}

Для некоторой подсказки использовать try-catch-finally читать здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...