อย่างใดฉันตั้งใจตั้งไฟล์ทั้งหมดในโฟลเดอร์ย่อยเป็น "ไม่มีเจ้าของ" และฉันไม่สามารถเปลี่ยนสิทธิ์ทั้งหมดฉันสามารถเปลี่ยนทีละไฟล์ด้วยตนเองโดยเปลี่ยนเจ้าของแล้วตั้งค่าสิทธิ์ แต่ฉันจะเปลี่ยนเจ้าของไฟล์ทั้งหมดได้อย่างไร ในไดเรกทอรีนี้ทันทีหรือไม่
อย่างใดฉันตั้งใจตั้งไฟล์ทั้งหมดในโฟลเดอร์ย่อยเป็น "ไม่มีเจ้าของ" และฉันไม่สามารถเปลี่ยนสิทธิ์ทั้งหมดฉันสามารถเปลี่ยนทีละไฟล์ด้วยตนเองโดยเปลี่ยนเจ้าของแล้วตั้งค่าสิทธิ์ แต่ฉันจะเปลี่ยนเจ้าของไฟล์ทั้งหมดได้อย่างไร ในไดเรกทอรีนี้ทันทีหรือไม่
คำตอบ:
ใช้takeown
จากพรอมต์คำสั่งเพื่อเป็นเจ้าของโฟลเดอร์โฟลเดอร์ย่อยและไฟล์ทั้งหมดซ้ำ:
takeown /f "c:\folder\subfolder" /r
สิ่งนี้ใช้ได้ดี แต่ถ้าคุณไม่ใช้คอนโซลบรรทัดคำสั่งในฐานะผู้ดูแลระบบอาจล้มเหลวสำหรับไฟล์ที่คุณไม่ได้เป็นเจ้าของ
ในการแก้ไขการอนุญาตที่เสียหายจริง ๆ วิธีที่ดีที่สุดคือเรียกใช้คำสั่งสองคำสั่งต่อไปนี้:
takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T
คนแรกจะให้คุณเป็นเจ้าของไฟล์ทั้งหมด แต่ที่อาจไม่เพียงพอตัวอย่างเช่นถ้าไฟล์ทั้งหมดมีสิทธิ์อ่าน / เขียน / exec ตั้งค่าเป็น "ปฏิเสธ" คุณเป็นเจ้าของไฟล์ แต่ก็ยังไม่สามารถทำอะไรกับมันได้
ในกรณีนั้นให้รันคำสั่งที่สองซึ่งจะแก้ไขสิทธิ์ที่เสียหาย
/D Y
พารามิเตอร์ลงไปtakeown
เพื่อให้มันยืนยันไดเรกทอรีที่เรียกซ้ำโดยอัตโนมัติซึ่งคุณไม่มีสิทธิ์ 'รายการไดเรกทอรี' สำหรับ
/D Y
ภาษาฝรั่งเศส/D O
อาจเป็นภาษาสเปน/D S
เป็นต้น
หมายเหตุ: cacls ว่าจะเลิก (ตั้งแต่ Windows Vista?) icacls
และจะให้คำแนะนำให้คุณใช้
คำสั่งนี้จะรีเซ็ตการอนุญาตซ้ำอีกครั้งในโฟลเดอร์:
icacls "C:\path\to\folder" /reset /T
คุณสามารถใช้cacls
จากพรอมต์คำสั่ง:
cacls "C: \ path \ to \ folder" / E / T / C / G "ผู้ดูแลระบบ": F
/T
สวิตช์ช่วยให้สามารถทำงานซ้ำ แทนที่Administrator
ด้วยผู้ใช้ที่คุณต้องการให้สิทธิ์
ฉันมีปัญหากับไฟล์ที่มีเส้นทางยาวมาก (มากกว่า 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_ สำหรับเคล็ดลับ / รีเซ็ตนี่คือสิ่งที่ฉันต้องการเพื่อให้สคริปต์ของฉันเสร็จสมบูรณ์เพื่อให้เป็นเจ้าของ 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 จากด้านบนคุณสังเกตเห็นว่าฉันเพิ่ม "\? \" ที่ด้านหน้าของเส้นทางต้นทาง โดยการเพิ่มสิ่งนี้ไว้ด้านหน้ามันจะยอมรับชื่อไฟล์ที่ยาวขึ้น นี่เป็นปัญหาที่ฉันมี แต่สิ่งนี้แก้ไขได้! ไชโย
หยอกเย้า