Set-Acl (Microsoft.PowerShell.Security)
Set-Acl
- โมดูล :
- Microsoft.PowerShell.Security
เปลี่ยนตัวบอกเกี่ยวกับความปลอดภัยของรายการที่ระบุ เช่น ไฟล์หรือคีย์รีจิสทรี
ไวยากรณ์
Set-Acl
[-Path] <String[]>
[-AclObject] <Object>
[-ClearCentralAccessPolicy]
[-Passthru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]Set-Acl
[-InputObject] <PSObject>
[-AclObject] <Object>
[-Passthru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]Set-Acl
-LiteralPath <String[]>
[-AclObject] <Object>
[-ClearCentralAccessPolicy]
[-Passthru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]คำอธิบาย
cmdlet นี้ใช้ได้เฉพาะบนแพลตฟอร์ม Windows เท่านั้น
Set-Acl cmdlet เปลี่ยนตัวบอกความปลอดภัยของรายการที่ระบุ เช่น แฟ้มหรือคีย์รีจิสทรี เพื่อให้ตรงกับค่าในตัวบอกเกี่ยวกับความปลอดภัยที่คุณระบุ
หากต้องการใช้ Set-Acl ให้ใช้พารามิเตอร์ Path หรือ InputObject เพื่อระบุรายการที่มีตัวอธิบายความปลอดภัยที่คุณต้องการเปลี่ยนแปลง จากนั้น ใช้พารามิเตอร์ AclObject หรือ SecurityDescriptor เพื่อระบุตัวบอกเกี่ยวกับความปลอดภัยที่มีค่าที่คุณต้องการนำไปใช้ Set-Acl ใช้ตัวบอกเกี่ยวกับความปลอดภัยที่ให้มา โดยจะใช้ค่าของพารามิเตอร์ AclObject เป็นรูปแบบและเปลี่ยนค่าในตัวบอกความปลอดภัยของรายการเพื่อให้ตรงกับค่าในพารามิเตอร์ AclObject
ตัวอย่าง
ตัวอย่างที่ 1: คัดลอกตัวบอกเกี่ยวกับความปลอดภัยจากไฟล์หนึ่งไปยังอีกไฟล์หนึ่ง
$DogACL = Get-Acl -Path "C:\Dog.txt"
Set-Acl -Path "C:\Cat.txt" -AclObject $DogACLคำสั่งเหล่านี้คัดลอกค่าจากตัวบอกความปลอดภัยของไฟล์ Dog.txt ไปยังตัวบอกความปลอดภัยของไฟล์ Cat.txt เมื่อคำสั่งเสร็จสมบูรณ์ ตัวอธิบายความปลอดภัยของไฟล์ Dog.txt และ Cat.txt จะเหมือนกัน
คำสั่งแรกใช้ Get-Acl cmdlet เพื่อรับตัวอธิบายความปลอดภัยของไฟล์ Dog.txt ตัวดำเนินการที่ได้รับมอบหมาย (=) จะจัดเก็บตัวบอกเกี่ยวกับความปลอดภัยไว้ในค่าของตัวแปร $DogACL
คำสั่งที่สองใช้ Set-Acl เพื่อเปลี่ยนค่าใน ACL ของ Cat.txt เป็นค่าใน $DogACL
ค่าของพารามิเตอร์ เส้นทาง คือเส้นทางไปยังไฟล์ Cat.txt ค่าของพารามิเตอร์ AclObject คือ ACL โมเดล ในกรณีนี้คือ ACL ของ Dog.txt ตามที่บันทึกไว้ในตัวแปร $DogACL
ตัวอย่างที่ 2: ใช้ตัวดำเนินการไปป์ไลน์เพื่อส่งคำอธิบาย
Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"คำสั่งนี้เกือบจะเหมือนกับคำสั่งในตัวอย่างก่อนหน้านี้ ยกเว้นว่าจะใช้ตัวดำเนินการไปป์ไลน์ (|) เพื่อส่งตัวอธิบายความปลอดภัยจากคำสั่ง Get-Acl ไปที่ คำสั่ง Set-Acl
คำสั่งแรกใช้ Get-Acl cmdlet เพื่อรับตัวอธิบายความปลอดภัยของไฟล์ Dog.txt ตัวดำเนินการไปป์ไลน์ (|) ส่งผ่านวัตถุที่แสดงถึงตัวบอกเกี่ยวกับความปลอดภัย Dog.txt ไปยัง cmdlet Set-Acl
คำสั่งที่สองใช้ Set-Acl เพื่อใช้ตัวอธิบายความปลอดภัยของ Dog.txt กับ Cat.txt เมื่อคำสั่งเสร็จสิ้น ACL ของไฟล์ Dog.txt และ Cat.txt จะเหมือนกัน
ตัวอย่างที่ 3: ใช้ตัวอธิบายความปลอดภัยกับไฟล์หลายไฟล์
$NewAcl = Get-Acl File0.txt
Get-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAclคำสั่งเหล่านี้ใช้ตัวอธิบายความปลอดภัยในไฟล์ File0.txt กับไฟล์ข้อความทั้งหมดในไดเร็กทอรี C:\Temp และไดเร็กทอรีย่อยทั้งหมด
คำสั่งแรกรับตัวอธิบายความปลอดภัยของไฟล์ File0.txt ในไดเร็กทอรีปัจจุบัน และใช้ตัวดำเนินการกำหนด (=) เพื่อจัดเก็บไว้ในตัวแปร $NewACL
คำสั่งแรกในไปป์ไลน์ใช้ Get-ChildItem cmdlet เพื่อรับไฟล์ข้อความทั้งหมดในไดเรกทอรี C:\Temp พารามิเตอร์ Recurse ขยายคำสั่งไปยังไดเร็กทอรีย่อยทั้งหมดของ C:\temp พารามิเตอร์ รวม จะจำกัดไฟล์ที่ดึงมาไว้เฉพาะไฟล์ที่มีนามสกุลไฟล์ .txt พารามิเตอร์ บังคับ รับไฟล์ที่ซ่อน ซึ่งหากไม่เป็นเช่นนั้นก็จะถูกแยกออก (คุณไม่สามารถใช้ c:\temp\*.txt ได้ เนื่องจากพารามิเตอร์ Recurse ทำงานในไดเรกทอรี ไม่ใช่ในไฟล์)
ตัวดำเนินการไปป์ไลน์ (|) ส่งออบเจ็กต์ที่แสดงถึงไฟล์ที่ดึงมาไปยัง Set-Acl cmdlet ซึ่งใช้ตัวอธิบายความปลอดภัยในพารามิเตอร์ AclObject ไปยังไฟล์ทั้งหมดในไปป์ไลน์
ในทางปฏิบัติ วิธีที่ดีที่สุดคือใช้พารามิเตอร์ WhatIf กับคำสั่ง Set-Acl ทั้งหมดที่อาจส่งผลต่อรายการมากกว่าหนึ่งรายการ ในกรณีนี้ คำสั่งที่สองในไปป์ไลน์จะเป็น Set-Acl -AclObject $NewAcl -WhatIf คำสั่งนี้แสดงรายการไฟล์ที่จะได้รับผลกระทบจากคำสั่ง หลังจากตรวจสอบผลลัพธ์แล้ว คุณสามารถเรียกใช้คำสั่งได้อีกครั้งโดยไม่ต้องใช้พารามิเตอร์ WhatIf
ตัวอย่างที่ 4: ปิดใช้งานการสืบทอดและรักษากฎการเข้าถึงที่สืบทอดมา
$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"
$isProtected = $true
$preserveInheritance = $true
$NewAcl.SetAccessRuleProtection($isProtected, $preserveInheritance)
Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAclคำสั่งเหล่านี้ปิดใช้งานการสืบทอดการเข้าถึงจากโฟลเดอร์หลัก ในขณะที่ยังคงรักษากฎการเข้าถึงที่สืบทอดมาที่มีอยู่
คำสั่งแรกใช้ Get-Acl cmdlet เพื่อรับตัวอธิบายความปลอดภัยของไฟล์ Dog.txt
จากนั้น ตัวแปรจะถูกสร้างขึ้นเพื่อแปลงกฎการเข้าถึงที่สืบทอดมาเป็นกฎการเข้าถึงที่ชัดเจน หากต้องการปกป้องกฎการเข้าถึงที่เกี่ยวข้องกับสิ่งนี้จากการสืบทอด ให้ตั้งค่าตัวแปร $isProtected เป็น $true หากต้องการอนุญาตการสืบทอด ให้ตั้งค่า $isProtected เป็น $false สำหรับข้อมูลเพิ่มเติม โปรดดูที่ตั้งค่าการป้องกันกฎการเข้าถึง
ตั้งค่าตัวแปร $preserveInheritance เป็น $true เพื่อรักษากฎการเข้าถึงที่สืบทอดมา หรือ $false เพื่อลบกฎการเข้าถึงที่สืบทอดมา จากนั้น การป้องกันกฎการเข้าถึงจะได้รับการอัปเดตโดยใช้เมธอด SetAccessRuleProtection()
คำสั่งสุดท้ายใช้ Set-Acl เพื่อใช้ตัวอธิบายความปลอดภัยของ Dog.txt เมื่อคำสั่งเสร็จสิ้น ACL ของ Dog.txt ที่สืบทอดมาจากโฟลเดอร์ Pets จะถูกนำไปใช้กับ Dog.txt โดยตรง และนโยบายการเข้าถึงใหม่ที่เพิ่มให้กับ Pets จะไม่เปลี่ยนการเข้าถึง Dog.txt
ตัวอย่างที่ 5: ให้สิทธิ์ผู้ดูแลระบบในการควบคุมไฟล์โดยสมบูรณ์
$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"
# Set properties
$identity = "BUILTIN\Administrators"
$fileSystemRights = "FullControl"
$type = "Allow"
# Create new rule
$fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type
$fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList
# Apply new rule
$NewAcl.SetAccessRule($fileSystemAccessRule)
Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAclคำสั่งนี้จะให้สิทธิ์กลุ่ม BUILTIN\Administrators สามารถควบคุมไฟล์ Dog.txt ได้อย่างสมบูรณ์
คำสั่งแรกใช้ Get-Acl cmdlet เพื่อรับตัวอธิบายความปลอดภัยของไฟล์ Dog.txt
ตัวแปรถัดไปจะถูกสร้างขึ้นเพื่อให้กลุ่ม BUILTIN\Administrators สามารถควบคุมไฟล์ Dog.txt ได้อย่างสมบูรณ์ ตัวแปร $identity ตั้งค่าเป็นชื่อบัญชีผู้ใช้ ตัวแปร $fileSystemRights ตั้งค่าเป็น FullControl และสามารถเป็นหนึ่งในค่า FileSystemRights ที่ระบุประเภทของการดำเนินการที่เกี่ยวข้องกับกฎการเข้าถึง ตัวแปร $type ตั้งค่าเป็น "อนุญาต" เพื่อระบุว่าจะอนุญาตหรือปฏิเสธการดำเนินการ ตัวแปร $fileSystemAccessRuleArgumentList เป็นรายการอาร์กิวเมนต์ที่จะต้องส่งผ่านเมื่อสร้างอ็อบเจ็กต์ FileSystemAccessRule ใหม่ จากนั้น ออบเจ็กต์ FileSystemAccessRule ใหม่จะถูกสร้างขึ้น และส่งออบเจ็กต์ FileSystemAccessRule ไปยังเมธอด SetAccessRule() เพื่อเพิ่มกฎการเข้าถึงใหม่
คำสั่งสุดท้ายใช้ Set-Acl เพื่อใช้ตัวอธิบายความปลอดภัยของ Dog.txt เมื่อคำสั่งเสร็จสิ้น กลุ่ม BUILTIN\Administrators จะสามารถควบคุม Dog.txt ได้อย่างสมบูรณ์
พารามิเตอร์
-AclObject
ระบุ ACL ด้วยค่าคุณสมบัติที่ต้องการ Set-Acl เปลี่ยน ACL ของรายการที่ระบุโดยพารามิเตอร์ Path หรือ InputObject เพื่อให้ตรงกับค่าในวัตถุความปลอดภัยที่ระบุ
คุณสามารถบันทึกเอาต์พุตของคำสั่ง Get-Acl ในตัวแปร จากนั้นใช้พารามิเตอร์ AclObject เพื่อส่งผ่านตัวแปร หรือพิมพ์ Get-Acl คำสั่ง
- พิมพ์ :
วัตถุ
- ตำแหน่ง:
1
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
False
-ClearCentralAccessPolicy
ลบนโยบายการเข้าถึงส่วนกลางออกจากรายการที่ระบุ
เริ่มตั้งแต่ Windows Server 2012 ผู้ดูแลระบบสามารถใช้ Active Directory และ Group Policy เพื่อกำหนดนโยบายการเข้าถึงส่วนกลางสำหรับผู้ใช้และกลุ่ม สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การควบคุมการเข้าถึงแบบไดนามิก: ภาพรวมสถานการณ์
พารามิเตอร์นี้ถูกนำมาใช้ใน Windows PowerShell 3.0
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
False
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Confirm
แจ้งให้คุณยืนยันก่อนเรียกใช้ cmdlet
- พิมพ์ :
SwitchParameter
- นามแฝง :
cf
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
False
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Exclude
ละเว้นรายการที่ระบุ ค่าของพารามิเตอร์นี้มีคุณสมบัติตรงตามพารามิเตอร์ เส้นทาง ป้อนองค์ประกอบเส้นทางหรือรูปแบบ เช่น *.txt อนุญาตให้ใช้ไวด์การ์ดได้
- พิมพ์ :
String[]
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
True
-Filter
ระบุตัวกรองในรูปแบบหรือภาษาของผู้ให้บริการ ค่าของพารามิเตอร์นี้มีคุณสมบัติตรงตามพารามิเตอร์ เส้นทาง ไวยากรณ์ของตัวกรอง รวมถึงการใช้ไวด์การ์ด ขึ้นอยู่กับผู้ให้บริการ ตัวกรองมีประสิทธิภาพมากกว่าพารามิเตอร์อื่นๆ เนื่องจากผู้ให้บริการจะใช้ตัวกรองเหล่านี้เมื่อดึงข้อมูลออบเจ็กต์ แทนที่จะให้ PowerShell กรองออบเจ็กต์หลังจากที่ดึงข้อมูลแล้ว
- พิมพ์ :
String
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
True
-Include
เปลี่ยนแปลงเฉพาะรายการที่ระบุ ค่าของพารามิเตอร์นี้มีคุณสมบัติตรงตามพารามิเตอร์ เส้นทาง ป้อนองค์ประกอบเส้นทางหรือรูปแบบ เช่น *.txt อนุญาตให้ใช้ไวด์การ์ดได้
- พิมพ์ :
String[]
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
True
-InputObject
เปลี่ยนตัวบอกความปลอดภัยของวัตถุที่ระบุ ป้อนตัวแปรที่มีวัตถุหรือคำสั่งที่ได้รับวัตถุ
คุณไม่สามารถไปป์วัตถุที่จะเปลี่ยนเป็น Set-Acl ให้ใช้พารามิเตอร์ InputObject อย่างชัดเจนในคำสั่งแทน
พารามิเตอร์นี้ถูกนำมาใช้ใน Windows PowerShell 3.0
- พิมพ์ :
PSObject
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
False
-LiteralPath
เปลี่ยนตัวอธิบายความปลอดภัยของรายการที่ระบุ ต่างจาก เส้นทาง ค่าของพารามิเตอร์ LiteralPath จะถูกใช้ตรงตามที่พิมพ์ทุกประการ ไม่มีอักขระใดที่ถูกตีความว่าเป็นไวด์การ์ด หากเส้นทางมีอักขระหลีก ให้ใส่เครื่องหมายคำพูดเดี่ยว (') เครื่องหมายคำพูดเดี่ยวบอกให้ PowerShell ไม่ต้องตีความอักขระใดๆ เป็นลำดับหลีก
พารามิเตอร์นี้ถูกนำมาใช้ใน Windows PowerShell 3.0
- พิมพ์ :
String[]
- นามแฝง :
PSPath
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
False
-Passthru
ส่งกลับวัตถุที่แสดงถึงตัวบอกเกี่ยวกับความปลอดภัยที่มีการเปลี่ยนแปลง ตามค่าเริ่มต้น cmdlet นี้ไม่สร้างผลลัพธ์ใดๆ
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Path
เปลี่ยนตัวอธิบายความปลอดภัยของรายการที่ระบุ ป้อนเส้นทางไปยังรายการ เช่น เส้นทางไปยังไฟล์หรือคีย์รีจิสทรี อนุญาตให้ใช้ไวด์การ์ดได้
หากคุณส่งวัตถุความปลอดภัยไปที่ Set-Acl (โดยใช้พารามิเตอร์ AclObject หรือ SecurityDescriptor หรือโดยการส่งวัตถุความปลอดภัยจาก Get-Acl เป็น Set-Acl) และคุณละเว้นพารามิเตอร์ Path (ชื่อและค่า) Set-Acl จะใช้เส้นทางที่รวมอยู่ใน วัตถุความปลอดภัย
- พิมพ์ :
String[]
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
True
-WhatIf
แสดงสิ่งที่จะเกิดขึ้นหาก cmdlet ทำงาน cmdlet ไม่ทำงาน
- พิมพ์ :
SwitchParameter
- นามแฝง :
wi
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
False
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
อินพุต
ความปลอดภัยของวัตถุ
คุณสามารถไปป์วัตถุ ACL ไปที่ cmdlet นี้
ตัวอธิบายความปลอดภัยทั่วไป
คุณสามารถส่งตัวบอกเกี่ยวกับความปลอดภัยไปที่ cmdlet นี้
เอาท์พุต
ไม่มี
ตามค่าเริ่มต้น cmdlet นี้จะส่งกลับไม่มีผลลัพธ์
ความปลอดภัยของไฟล์
เมื่อคุณใช้พารามิเตอร์ PassThru cmdlet นี้จะส่งกลับวัตถุความปลอดภัย ประเภทของออบเจ็กต์ความปลอดภัยขึ้นอยู่กับประเภทของรายการ
หมายเหตุ
cmdlet นี้ใช้ได้เฉพาะบนแพลตฟอร์ม Windows เท่านั้น
Set-Acl cmdlet ได้รับการสนับสนุนโดยระบบไฟล์ PowerShell และผู้ให้บริการรีจิสทรี คุณสามารถใช้มันเพื่อเปลี่ยนตัวอธิบายความปลอดภัยของไฟล์ ไดเร็กทอรี และรีจิสตรีคีย์ได้