@Drovosek01

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

У меня есть массив строк-путей на папки и файлы.
Я в цикле foreach получаю каждый элемент массива и проверяю ряд параметров, в том числе если текущий элемент (файл или папку) можно удалить без запроса прав администратора - то удаляю элемент.

В противном случае я добавляю элемент в отдельный массив и в дальнейшем перебираю элементы отдельного массива и формирую многострочную команду, чтобы 1 раз запустить Start-Process powershell с правами администратора и удалить все элементы с правами администратора за 1 раз.

Проблема:
Я для теста создал папку в Проводнике простым способом - нажав на верхней панели кнопку "Новая папка", либо сочетание клавиш "Ctrl + Shift + N"

Я не могу найти нормальный способ проверить, что я могу удалить папку без прав администратора.
Гуглил и спрашивал ChatGPT, были такие варианты:
1.
$targetPath = 'D:\TEMP\folder\test\Новая папка'
Test-Path -Path "$targetPath" -AccessRights "Delete" -ErrorAction SilentlyContinue

- выполнение строки с Test-Path выкидывает ошибку, значит права администратора нужны
2.
$targetPath = 'D:\TEMP\folder\test\Новая папка'
$acl = Get-Acl -Path $folderPath
$hasDeleteAccess = $acl.Access | Where-Object { $_.IdentityReference -eq $env:USERNAME -and $_.FileSystemRights -match "Delete" }
if ($hasDeleteAccess) {
    Write-Host "У вас есть права для удаления папки $folderPath."
} else {
    Write-Host "Вам нужны права администратора для удаления папки $folderPath."
}

- тут тоже, получается, что нужны права админа для удаления папки.

Но в самом Проводнике при удалении и каком-либо изменении папки - права администратора не запрашиваются. Папка обычная, созданная обычным/стандартным способом в Проводнике.

Вопрос:
Как в Powershell проверить, что папку можно удалить без запроса прав администратора?
Только проверить, не удалять.
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Drovosek01 Автор вопроса
В качестве альтернативы можно создать и удалить временный файл в папке и если это получится - значит права администратора на создание файлов не нужны, а значит и, вероятно, на удаление папки тоже права админа не понадобятся.

Вот такой пример выдал ChatGPT:
try {
    # Проверка на возможность записи (например, создание временного файла)
    $tempFile = [System.IO.Path]::Combine($FolderPath, [System.IO.Path]::GetRandomFileName())
    New-Item -Path $tempFile -ItemType File -Force | Out-Null
    Remove-Item -Path $tempFile -Force

    Write-Output "Папка может быть удалена без проблем."
} catch {
    Write-Output "Произошла ошибка при проверке: $_"
}


Но, если я правильно понимаю, это не совсем правильный путь.
Вероятно можно как-то разграничить права, чтобы создавать файлы в папке можно было без прав админа, а для удаления папки - права админа нужны (но это только гипотеза).
Также создание и удаление файла, вероятно, время затратная процедура.
Ответ написан
@FluffyBeaver
Если по задумке в конце запускае удаление оставшихся папок с правами администратора, то почему бы не удалять все сразу с правами администратора?
И даже, если вдруг есть причина так не делать (хотел бы я узнать, какая), можно пробовать удалить все без прав администратора, а потом просто смотреть, какие папки из списка остались на месте.
Наверняка нужен какой результат, а не информация об отсутствии прав на удаление?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы