Как подтвердить, что файл не существует, а доступ запрещен? - PullRequest
1 голос
/ 28 мая 2019

Я использую Test-Path, чтобы проверить наличие и подключение к различным файлам и папкам в моих сценариях.Если я получаю возвращаемое значение $false, у меня нет никакого способа узнать, существует ли файл определенно , или если учетная запись пользователя не имеет доступа или подключения к пути,

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

Мне не удалось получить этот ответ из следующих сообщений:


Я собрал предложение @Matt, представленное в функции, как:

function Get-FileType([string]$Path)
{
    try 
    {
        get-item -LiteralPath $Path -ErrorAction Stop
        $exists = 'Exists'
    }
    catch [System.UnauthorizedAccessException] {$exists = 'Access Denied'}              #Inaccessible
    catch [System.Management.Automation.ItemNotFoundException]{$exists = 'Not Found'}   #Doesn't Exist
    catch [System.Management.Automation.DriveNotFoundException]{$exists = 'Not Found'}  #Doesn't Exist
    catch {$exists='Unknown'} #Unknown

    return $exists
}

Get-FileType 'C:\test data\myfile.txt'

1 Ответ

3 голосов
/ 28 мая 2019

Почему бы не попробовать получить элемент и проверить сообщение об ошибке, если оно не удается.

$path = "\\sqlskylinevm\path\file.txt"

$file = try{
    Get-Item $path -ErrorAction Stop
} catch [System.UnauthorizedAccessException] {
    "can't get to it"
} catch [System.Management.Automation.ItemNotFoundException]{
    "does not exist"
}

if($file -eq "can't get to it"){
    Write-Warning "File exists but access is denied"
} elseif($file -eq "does not exist"){
    Write-Warning "Could not find file"
} else {
    Write-Host "Oh Happy Days!" -ForegroundColor Green
}

$file в этом случае будет содержать текстовую строку с сообщением или сам файл / каталог, с которым вы тестируете.Вы также можете сделать то же самое с Test-Path ... -ErrorAction Я думаю, это действительно зависит от того, что вы хотите сделать с результатами.

Этот код не идеален, но дает вам необходимые пути.Различает отказ в доступе, не существует и существует.

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