Відповіді:
Використовуйте takeown
командний рядок для отримання права власності на папку, всі її папки та файли рекурсивно:
takeown /f "c:\folder\subfolder" /r
Це добре працює, але якщо ви не запустите консоль командного рядка як адміністратор, вона може не працювати з файлами, якими ви не володієте.
Щоб виправити дійсно зламані дозволи, найкраще виконати ці дві команди одна за одною:
takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T
Перший дасть вам право власності на всі файли, однак цього може бути недостатньо, наприклад, якщо для всіх файлів встановлено "заборонити" дозволу читання / записування / виконання. Ви володієте файлами, але все одно не можете з ними нічого робити.
У цьому випадку запустіть другу команду, яка виправить зламані дозволи.
/D Y
параметр, щоб takeown
він автоматично підтверджував повторювані каталоги, у яких для вас немає дозволів "список каталогу".
/D Y
, на французькій /D O
, можливо, на іспанській /D S
тощо.
У мене були проблеми з файлами з дуже довгими шляхами (більше 256 символів). Дві команди
takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T
працювали за винятком цих файлів із дійсно довгими шляхами та іменами. Я закінчив перейменувати
"C:\path\to\really_long_folder_name"
до
"C:\path\to\r"
а потім біг
takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q
після чого я міг перейменувати папки на щось більш розумне. takeown's / DY відповідає "так" на запити. Для icacls я використав / дозволити, щоб надати повний доступ усім (оскільки я просто намагався отримати доступ до даних на жорсткому диску з мертвого ПК), з / t обробляти підпапки та файли, / q працювати в спокійному режимі (приховати успіхи) та / c для відображення помилок. Я повторив процес, перейменувавши папки, поки всі дозволи файлів не були оновлені успішно.
Сподіваємось, це допомагає тому, хто зіткнувся з помилками, подібними до "не вдалося перерахувати об'єкти в доступі до контейнера, відмовлено" помилок, які я отримував при спробі отримати доступ до даних зі старого жорсткого диска.
Дякую @ this.lau_ за пораду / reset, саме це мені потрібно було виконати сценарій, щоб взяти право власності на CSC та зробити його резервну копію. Після отримання права власності на C: \ Windows \ CSC дозволи, як правило, стають дуже непослідовними щодо спадкування - перемикач / скидання виправив це прямо для мене.
Function Copy-CSCData {
$Datetime = Get-Date -Format yyyyMMdd.hhmmss
$LogPath = 'PATH TO LOG'
$CSCSource = 'C:\Windows\CSC\v2.0.6\namespace'
$Dest = 'DESTINATION PATH'
$icaclsource = "\\?\" + $CSCSource
$CSCLogfile = "$LogPath\" + "$Datetime" + "_CSCRobocopy.log"
icacls.exe $icaclsource /reset /T
icacls.exe $icaclsource /grant :r "Everyone:(OI)(CI)F"
Robocopy $CSCSource $Dest /Copy:DATSO /E /XO /Z /LOG+:$CSCLogfile /V /FP /NP /R:2 /W:2 /XF "~$*","*.tmp"
}
@Thesle Williams - якщо ви перевірте змінну $ icaclsource зверху, ви помітите, що я додаю "\? \" Перед вихідним шляхом. Додавши це в передній частині, він прийме довші імена файлів. Це теж проблема, яка у мене була, але це виправлено! Ура.
Джош