none
Try-Catch в функциях (Powershell) RRS feed

  • Вопрос

  • Здравствуйте!

    Вопрос наверное глупый, но имеется функция создания директории:

    function CreatepDir ([string] $DirPath) {
    	try {
    		New-Item -ItemType directory -Path $DirPath
    	}
    	catch {
    		logger "Ошибка создания директории $DirPath"
    		return $false
    	}
    	return $true
    }

    при вызове функции, если директория существует в само писанную функцию logger должно передаться сообщение об ошибке, однако этого не происходит. Просто выводиться сообщение об ошибке:

    New-Item : Элемент с указанным именем C:\1 уже существует.
    C:\Temp\1c4b54b4-c428-49cb-90d0-8666fffbaa47.ps1:3 знак:11
    +         New-Item <<<<  -ItemType directory -Path "C:\1"
        + CategoryInfo          : ResourceExists: (C:\1:String) [New-Item], IOException
        + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand

    Если же код вынести из функции - он отрабатывается нормально. Перерыл всю конференцию, но что то ничего не нашел. Подскажите, где я "туплю" :)

    28 октября 2012 г. 13:30

Ответы

  • Catch ловит только критические ошибки (terminating error). Обычные ошибки, которые не приводят к завершению команды, не ловятся.

    New-Item -ItemType directory -Path $DirPath -ErrorAction:Stop

    • Помечено в качестве ответа evlmn 30 октября 2012 г. 11:43
    28 октября 2012 г. 17:05

Все ответы