共用方式為


Set-Acl

變更指定專案的安全性描述元,例如檔案或登錄機碼。

Syntax

Set-Acl
   [-Path] <String[]>
   [-AclObject] <Object>
   [[-CentralAccessPolicy] <String>]
   [-ClearCentralAccessPolicy]
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [-UseTransaction]
   [<CommonParameters>]
Set-Acl
   [-InputObject] <PSObject>
   [-AclObject] <Object>
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [-UseTransaction]
   [<CommonParameters>]
Set-Acl
   -LiteralPath <String[]>
   [-AclObject] <Object>
   [[-CentralAccessPolicy] <String>]
   [-ClearCentralAccessPolicy]
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [-UseTransaction]
   [<CommonParameters>]

Description

Cmdlet 會 Set-Acl 變更指定專案的安全性描述元,例如檔案或登錄機碼,以符合您提供的安全性描述元中的值。

若要使用 Set-Acl,請使用 PathInputObject 參數來識別您想要變更其安全性描述元的專案。 然後,使用 AclObjectSecurityDescriptor 參數來提供具有您要套用之值的安全性描述元。 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

Path 參數的值是Cat.txt檔案的路徑。 AclObject 參數的值是模型 ACL,在此案例中,Dog.txt的 ACL 儲存在變數中$DogACL

範例 2:使用管線運算符傳遞描述元

Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"

此命令與上一個範例中的命令幾乎相同,不同之處在於它會使用管線運算符 (|) 將命令的安全性描述元傳送 Get-AclSet-Acl 命令。

第一個命令會 Get-Acl 使用 Cmdlet 來取得Dog.txt檔案的安全性描述元。 管線運算子 (|) 會將代表Dog.txt安全性描述元的對象傳遞至 Set-Acl Cmdlet。

第二個命令會使用 Set-Acl 將Dog.txt的安全性描述元套用至Cat.txt。 當命令完成時,Dog.txt和Cat.txt檔案的 ACL 完全相同。

範例 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 Include 參數會將擷取的檔案限制為.txt擴展名為的檔案。 Force 參數會取得隱藏的檔案,否則會予以排除。 (您無法使用 c:\temp\*.txt,因為 Recurse 參數適用於目錄,而不是在檔案上。

管線運算符 (|) 會將代表所擷取檔案的物件傳送至 Set-Acl Cmdlet,此 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。 當命令完成時,繼承自Pets資料夾之Dog.txt的 ACL 將直接套用至Dog.txt,而新增至寵物的新存取原則將不會變更Dog.txt的存取權。

範例 5:授與 管理員 istrators 檔案的完整控制權

$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\管理員 istrators 群組完整控制Dog.txt檔案。

第一個命令會 Get-Acl 使用 Cmdlet 來取得Dog.txt檔案的安全性描述元。

系統會建立下一個變數,以授與 BUILTIN\管理員 istrators 群組對Dog.txt檔案的完整控制權。 變數$identity會設定為用戶帳戶的名稱$fileSystemRights變數設定為 FullControl,而且可以是任一 FileSystemRights 值,指定與存取規則相關聯的作業類型。 設定 $type 為 「Allow」 的變數會指定是否允許或拒絕作業。 變數 $fileSystemAccessRuleArgumentList 是建立新的 FileSystemAccessRule 物件時要傳遞的自變數清單。 然後會建立新的 FileSystemAccessRule 物件,並將 FileSystemAccessRule 對象傳遞至 SetAccessRule() 方法,以新增存取規則。

最後一個命令會使用 Set-Acl 將的安全性描述元套用至 Dog.txt。 當命令完成時,BUILTIN\管理員 istrators 群組將完全控制Dog.txt。

參數

-AclObject

指定具有所需屬性值的 ACL。 Set-Acl會變更 PathInputObject 參數所指定專案的 ACL,以符合指定之安全性物件中的值。

您可以將命令的 Get-Acl 輸出儲存在變數中,然後使用 AclObject 參數傳遞變數,或輸入 Get-Acl 命令。

Type:Object
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-CentralAccessPolicy

建立或變更專案的集中存取原則。 輸入計算機上的中央存取原則的 CAP 識別碼或易記名稱。

從 Windows Server 2012 開始,系統管理員可以使用 Active Directory 和組策略來設定使用者和群組的集中存取原則。 如需詳細資訊,請參閱動態 存取控制:案例概觀

此參數是在 Windows PowerShell 3.0 中引進的。

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ClearCentralAccessPolicy

從指定的項目移除集中存取原則。

從 Windows Server 2012 開始,系統管理員可以使用 Active Directory 和組策略來設定使用者和群組的集中存取原則。 如需詳細資訊,請參閱動態 存取控制:案例概觀

此參數是在 Windows PowerShell 3.0 中引進的。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

執行 Cmdlet 之前先提示您確認。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Exclude

省略指定的專案。 此參數的值會 限定Path 參數。 輸入路徑專案或模式,例如 *.txt。 允許通配符。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

以提供者的格式或語言指定篩選。 此參數的值會 限定Path 參數。 篩選的語法,包括使用通配符,取決於提供者。 篩選比其他參數更有效率,因為提供者在擷取物件時會套用它們,而不是讓PowerShell在擷取對象之後篩選物件。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

只變更指定的專案。 此參數的值會 限定Path 參數。 輸入路徑專案或模式,例如 *.txt。 允許通配符。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

變更指定之物件的安全性描述元。 輸入包含 物件的變數,或取得物件的命令。

您無法使用管線會變更為 Set-Acl請改用命令中的 InputObject 參數。

此參數是在 Windows PowerShell 3.0 中引進的。

Type:PSObject
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

變更指定專案的安全性描述元。 不同於Path,LiteralPath 參數的值會與輸入時完全相同。 不會將任何字元解譯為通配符。 如果路徑包含逸出字元,請以單引號 (') 括住它。 單引號會告知PowerShell不要將任何字元解譯為逸出序列。

此參數是在 Windows PowerShell 3.0 中引進的。

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Passthru

傳回 物件,表示已變更的安全性描述元。 根據預設,此 Cmdlet 不會產生任何輸出。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

變更指定專案的安全性描述元。 輸入項目的路徑,例如檔案或登錄機碼的路徑。 允許通配符。

如果您將安全性對象傳遞至 Set-Acl (使用 AclObject 或 SecurityDescriptor 參數,或將安全性物件從 Get-Acl 傳遞至 Set-Acl),而您省略 Path 參數 (name 和 value),Set-Acl則會使用安全性物件中包含的路徑。

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-UseTransaction

在作用中交易中包含 命令。 只有在交易進行中時,此參數才有效。 如需詳細資訊,請參閱 about_Transactions

Type:SwitchParameter
Aliases:usetx
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

顯示執行 Cmdlet 後會發生的情況。 未執行 Cmdlet。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

ObjectSecurity

您可以使用管線將 ACL 物件傳送至此 Cmdlet。

CommonSecurityDescriptor

您可以使用管線將安全性描述元傳送至此 Cmdlet。

輸出

None

根據預設,此 Cmdlet 不會傳回任何輸出。

FileSecurity

當您使用 PassThru 參數時,這個 Cmdlet 會傳回安全性物件。 安全性物件的類型取決於項目的類型。

備註

PowerShell 檔案系統和登錄提供者支援 Cmdlet Set-Acl 。 因此,您可以使用它來變更檔案、目錄和登錄機碼的安全性描述項。