ฉันต้องการทำซ้ำการอนุญาตของไฟล์ไปยังไฟล์อื่น ฉันไม่ต้องการคัดลอกข้อมูลสิทธิ์เท่านั้น
ตัวอย่างเช่นฉันสร้างไฟล์ใหม่และต้องการให้มีสิทธิ์เหมือนกับไฟล์อื่นที่มีอยู่แล้ว
ฉันต้องการทำซ้ำการอนุญาตของไฟล์ไปยังไฟล์อื่น ฉันไม่ต้องการคัดลอกข้อมูลสิทธิ์เท่านั้น
ตัวอย่างเช่นฉันสร้างไฟล์ใหม่และต้องการให้มีสิทธิ์เหมือนกับไฟล์อื่นที่มีอยู่แล้ว
คำตอบ:
คุณสามารถทำได้ในไม่กี่ขั้นตอนด้วยicaclsและโปรแกรมแก้ไขข้อความ
ก่อนอื่นคุณต้องบันทึกการอนุญาตของไฟล์ต้นฉบับ
icacls C:\test\file1.bin /save perms.txt
คุณจะต้องแก้ไขperms.txt
ไฟล์ที่คุณเพิ่งสร้างในโฟลเดอร์ที่คุณใช้icacls
งานไฟล์ควรมีลักษณะดังนี้:
file1.bin
D:AI(A;;0x1301bf;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)
คุณสามารถข้ามสิ่งทั้งหมดในแถวที่ 2 สิ่งที่เราสนใจคือแถวแรก เปลี่ยนเป็นfile1.bin
ชื่อไฟล์ใหม่ของคุณfile2.bin
และบันทึกไฟล์
ตอนนี้คุณเพียงแค่ต้องกู้คืนการอนุญาตไฟล์ในไฟล์ที่ 2 โปรดทราบว่าเราไม่ได้รวมชื่อไฟล์ในครั้งนี้ (หากคุณได้รับข้อผิดพลาดที่ระบุว่า " ไม่ใช่สิทธิ์หรือกลุ่มอ้างอิงทั้งหมดที่ถูกกำหนดให้กับผู้เรียก " ให้เรียกใช้โปรแกรมอีกครั้งในพร้อมท์คำสั่งแบบยกระดับ)
icacls C:\test\ /restore perms.txt
File.GetAccessControl()
และFile.SetAccessControl()
ในการทำให้เป็นชุด (คัดลอกข้อความเตือนความปลอดภัยจากโฟลเดอร์ย่อยหรือโฟลเดอร์ทั้งหมดของไดรฟ์หนึ่งไปยังโฟลเดอร์ / ไฟล์เดียวกันบนไดรฟ์อื่น) สร้าง a พูดcpdacls.bat
ไฟล์ด้วยเนื้อหานี้:
@echo off
for /r %1 %%f in (.) do call :icacls_one %%f %2
goto :eof
:icacls_one
icacls %1\*.* /save %TEMP%\perms.txt
icacls %2.%~pnx1 /restore %TEMP%\perms.txt
del /q %TEMP%\perms.txt
แล้วเรียกใช้เหมือนcpdacls.bat e:\ f:\
กัน
โปรดทราบว่าโครงสร้างโฟลเดอร์ในโฟลเดอร์ปลายทางจะต้องเหมือนกับโครงสร้างโฟลเดอร์ในโฟลเดอร์ต้นทางที่นำมาจากรูทของมันไม่ขึ้นอยู่กับโฟลเดอร์ย่อยที่คุณระบุเป็นโฟลเดอร์ต้นทาง
วิธีที่ง่ายที่สุดคือการใช้ PowerShell และเรียกใช้:
Get-Acl .\file1 | Set-Acl .\file2