Set-Acl
變更指定項目的安全性描述元,例如檔案或登錄機碼。
Syntax
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>]
Description
此 Cmdlet 僅適用於 Windows 平臺。
Cmdlet 會 Set-Acl
變更指定專案的安全性描述元,例如檔案或登錄機碼,以符合您提供之安全描述元中的值。
若要使用 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 中的值變更為 中的 $DogACL
值 Cat.txt。
Path 參數的值是 Cat.txt 檔案的路徑。 AclObject 參數的值是模型 ACL,在此案例中為儲存在變數中 Dog.txt 的 $DogACL
ACL。
範例 2:使用管線運算符傳遞描述項
Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"
此命令與上一個範例中的命令幾乎相同,不同之處在於它會使用管線運算元 (|
) 將命令的安全性描述元傳送 Get-Acl
至 Set-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 參數適用於目錄,不適用於 files.)
管線運算符 (|
) 會將代表所擷取檔案的物件傳送至 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。 當命令完成時,繼承自 [寵物] 資料夾之 Dog.txt ACL 會直接套用至 Dog.txt,而新增至寵物的新存取原則將不會變更 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
為 「Allow」 的變數會指定是否允許或拒絕作業。 變數 $fileSystemAccessRuleArgumentList
是建立新的 FileSystemAccessRule 物件時要傳遞的自變數清單。 然後會建立新的 FileSystemAccessRule 物件,並將 FileSystemAccessRule 物件傳遞至 SetAccessRule () 方法,新增存取規則。
最後一個命令會使用 Set-Acl
將的安全性描述項套用至 Dog.txt。 當命令完成時, BUILTIN\Administrators 群組將完全控制 Dog.txt。
參數
-AclObject
將所要的屬性值指定給 ACL。 Set-Acl
會變更 Path 或 InputObject 參數所指定專案的 ACL,以符合指定之安全性物件中的值。
您可以將命令的 Get-Acl
輸出儲存在變數中,然後使用 AclObject 參數傳遞變數,或輸入 Get-Acl
命令。
Type: | Object |
Position: | 1 |
Default value: | None |
Required: | True |
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
變更指定項目的安全性描述元。 輸入項目的路徑,例如檔案或登錄機碼的路徑。 允許使用萬用字元。
如果您使用 AclObject 或 SecurityDescriptor 參數,或將安全性物件從 (Get-Acl 傳遞至) ,並省略 Path 參數 (名稱和值) ,請將 Path 參數傳遞至 Set-Acl
Set-Acl
) ,Set-Acl
請使用安全性物件中包含的路徑。
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-WhatIf
顯示執行 Cmdlet 後會發生的情況。 Cmdlet 並不會執行。
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
輸入
您可以使用管線將 ACL 物件傳送至此 Cmdlet。
您可以使用管線將安全描述項傳送至此 Cmdlet。
輸出
None
根據預設,此 Cmdlet 不會傳回任何輸出。
當您使用 PassThru 參數時,此 Cmdlet 會傳回安全性物件。 安全性物件的類型需視項目的類型而定。
備註
此 Cmdlet 僅適用於 Windows 平臺。
Set-Acl
PowerShell 檔案系統和登錄提供者支援 Cmdlet。 這表示您可以用它來變更檔案、目錄和登錄機碼的安全性描述元。