Как удалить доступный только для чтения атрибут папки powershell?

Я пробовал много кода, но все еще не могу удалить свойство только для чтения этой конкретной папки.

Ниже приведен код, который удаляет свойство "только для чтения" для файлов, находящихся в этой папке, но не удаляет атрибут "только для чтения" этой папки:

$Path = "C:\Suraj\powershell scripts\review script" 
$Files = Get-ChildItem $Path -Recurse
ForEach ($File in $Files) {
    Write-Host file:$File IsReadOnly: $File.IsReadOnly 
    if ($File.Attributes -ne "Directory" -and $File.Attributes -ne "Directory, Archive") {
        try {
            Set-ItemProperty -Path $Path"\"$File -name IsReadOnly -value $false 
        }
        catch { 
            Write-Host "Error at file " $Path "\" $File 
        }
    } 
}

3 ответа

Если в папке есть ReadOnly атрибут можно проверить с помощью:

$folder = Get-Item -Path path/to/folder
$folder.Attributes

По умолчанию вывод будет:

Directory

Чтобы добавить ReadOnly атрибут, просто выполните:

$folder.Attributes += 'ReadOnly'

Если вы снова отобразите атрибуты, это должно выглядеть так:

ReadOnly, Directory

Чтобы удалить ReadOnly атрибут, просто выполните:

$folder.Attributes -= 'ReadOnly'

Атрибуты снова выглядят так:

Directory

Как видите, действительно можно добавлять и удалять ReadOnly атрибут, но, как уже упоминалось в комментариях, это не будет иметь большого эффекта.

Просто вмешиваюсь, чтобы сказать, что ответ stackprotector был очень полезным, и прокомментировать (не могу сделать это напрямую из-за репутации) в ответ на:

«Как видите, действительно можно добавлять и удалять атрибут ReadOnly, но, как уже упоминалось в комментариях, это не окажет большого эффекта».

Это сильно повлияло на файловый сервер Windows 2019. Я заметил очень странное поведение, когда подключенный к нему клиент видел совершенно другие имена, чем те, что были на самом сервере. При использовании Powershell Get-Item единственным отличием был атрибут ReadOnly. Как только снял, сразу все заработало как положено.

Спасибо.

Все предыдущие ответы мне никогда не помогали. Единственная команда, которая фактически удаляет атрибут, это:

      attrib -s -h -r "c:\path_to_folder\*.*" /s /d

Описание:

  • -s Удалить системный атрибут
  • -h Удалить скрытый атрибут
  • -r Удалить атрибут только для чтения
  • /s Установить/удалить атрибуты в текущей папке, включая подпапки
  • /d также установить/удалить атрибуты папок

Источник: /questions/23208285/lightbox-dlya-realizatsii-alboma-v-veb-prilozhenii/23208293#23208293

NB: свойство верхней папки по-прежнему будет определено какRead-only (Only applies to files in folder)но файлы будут правильно установлены как файлы, не доступные только для чтения.

Проверить правильность определения файлов можно с помощью следующей команды:

      Get-ChildItem -Path "c:\path_to_folder" -File -Recurse | foreach {$_.Attributes}