Yanıtlar:
Gerçekten kırık izinleri düzeltmek için en iyisi bu iki komutu birbiri ardına çalıştırmaktır:
takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T
İlki size tüm dosyaların sahipliğini verecektir, ancak bu, örneğin tüm dosyaların "reddet" olarak ayarlanmış okuma / yazma / çalıştırma izinlerine sahip olması yeterli olmayabilir. Dosyaların size aittir, ancak yine de onlarla hiçbir şey yapamazsınız.
Bu durumda, kırık izinleri düzelten ikinci komutu çalıştırın.
/D Y
Parametreyi ekledim, takeown
böylece 'liste dizini' izinlerinin olmadığı yinelenen dizinleri otomatik olarak doğrular.
/D Y
Fransız birinde, /D O
belki İspanyolca üzerinde, /D S
vb
Önbelleklerin kullanımdan kaldırıldığını (Windows Vista'dan beri) ve kullanımınızı önerdiğini unutmayın icacls
.
Bu komut tekrar tekrar bir klasördeki izinleri sıfırlayacaktır:
icacls "C:\path\to\folder" /reset /T
Çok uzun yollu (256 karakterden büyük) dosyalarda sorun yaşadım. İki komut
takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T
gerçekten uzun yolları ve isimleri olan bu dosyalar dışında çalıştı. Yeniden adlandırmayı bıraktım
"C:\path\to\really_long_folder_name"
için
"C:\path\to\r"
ve sonra çalışan
takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q
Bundan sonra klasörleri daha mantıklı bir şey olarak yeniden adlandırabilirdim. takeown'un / DY istemlerine evet cevaplar. İcacls için herkese tam erişim sağlamak için kullandım / verdim (ölü bir bilgisayardan sabit diskteki verilere erişmeye çalıştığım gibi), alt klasörleri ve dosyaları işlemek için / t, sessiz modda çalıştırmak için / q başarılar) ve / c hataları göstermek için. Tüm dosya izinleri başarıyla güncellenene kadar klasörleri yeniden adlandırarak işlemi tekrarladım.
Umarım bu, eski bir sabit sürücüden verilere erişmeye çalışırken "konteyner erişimindeki nesneleri numaralandırmak başarısız oldu" gibi hatalarla karşılaşan birine yardımcı oluyor.
Thanks / this.lau_ / reset ipucu için, bu tam olarak CSC'nin sahipliğini almak ve bir yedeğini almak için betiğimi tamamlamak için ihtiyacım olan şeydi. C: \ Windows \ CSC mülkiyeti alındıktan sonra izinler devralma konusunda çok tutarsızlık eğilimindedir - / reset anahtarı benim için düzeltti.
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 - Yukarıdaki $ icaclsource değişkenine bakarsanız, kaynak yolunun önüne "\? \" Ekledim. Bunu önüne ekleyerek daha uzun dosya adlarını kabul eder. Bu aynı zamanda yaşadığım bir problem ama bu düzeltti! Şerefe.
alay etmek