Обработка директории Exception Exception - PullRequest
0 голосов
/ 25 июня 2019

Я новичок в PowerShell.У меня есть кусок кода, который проверяет, существует ли папка "ilalog" или нет.Когда я запускаю этот скрипт в первый раз, он проверяет папку «ilalog», если она не существует, она создает.Когда я запускаю скрипт во второй раз.Я получаю сообщение об ошибке ниже:

Элемент с указанным именем D: \ Temp \ ilalog уже существует "FullyQualifiedErrorId: DirectoryExist, Microsoft.PowerShell.Commands.NewItemCommand".

как обработать это исключение

Я пытался использовать блок try и Catch

 $rgflder="ilalog"
    [bool]$checkrg=Test-Path D:\Gdump\$rgfolder -PathType Any
    if ( $checkrg -eq $False)
    {
try{
    New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory"
    }
catch [System.IO.IOException] 
    {
            if ($_.CategoryInfo.Category -eq $resExistErr) {Write-host "Dir Exist"}
} 
}       
else
{
Write-Output "Directory Exists" 
 }

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Почему бы просто не сделать, как показано ниже?

$rgflder="ilalog"

# combine the path and foldername
$rgPath = Join-Path -Path 'D:\Gdump' -ChildPath $rgflder

# test if the folder already exists
if (Test-Path $rgPath -PathType Container) {
    Write-Output "Directory Exists"
}
else {
    # if not, create the new folder
    try {
        $null = New-Item -Path $rgPath -ItemType Directory -ErrorAction Stop
        Write-Output "Created directory '$rgPath'"
    }
    catch {
        # something terrible happened..
        Write-Error "Error creating folder '$rgPath': $($_.Exception.Message)"
    }
}
0 голосов
/ 25 июня 2019

Если вы хотите продолжить обработку своего скрипта при выполнении действий, основанных на типе ошибки, простой способ - просто изучить переменную $error.Использование Trap также может быть опцией.

$error.clear()
New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory"
if ($error[0].Exception.GetType().Fullname -eq 'System.IO.IOException') {
    "Dir Exists"
}
else {
    "Dir was created"
}

Если вы хотите использовать try-catch, вам нужно рассматривать вашу нескончаемую ошибку как завершающую ошибку, чтобы активировать блок catch.Вы можете сделать это с помощью -ErrorAction Stop.

try {
    New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory" -ErrorAction Stop
    }
catch [System.IO.IOException] 
    {
    "Exception caught!"
    }

В качестве альтернативы вы можете управлять этим в своем сеансе, установив $ErrorActionPreference = 'Stop', который будет применяться ко всем командам в этом сеансе.

Сохранитьпомните, что значение, переданное -ErrorAction, переопределяет настройку в $ErrorActionPreference.Кроме того, настройки действий при ошибках не влияют на устранение ошибок.Таким образом, вы не можете ожидать установки -ErrorAction Continue и продолжать обработку кода при ошибке завершения.

Многие команды возвращают объекты, которые могут или не могут быть ошибками завершения.Вы найдете больше успеха в явном виде, указав, когда вы хотите выдать завершающую ошибку.

Подробнее о предпочтении действия при ошибке можно узнать по адресу Об общих параметрах .Мне действительно нравится Все об исключениях для обработки исключений в PowerShell.

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