Как удалить доступный только для чтения атрибут папки 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}