ค้นหาเว็บไซต์

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 และผู้ให้บริการรีจิสทรี คุณสามารถใช้มันเพื่อเปลี่ยนตัวอธิบายความปลอดภัยของไฟล์ ไดเร็กทอรี และรีจิสตรีคีย์ได้

บทความที่เกี่ยวข้อง