Set-Acl
變更指定項目的安全描述符,例如檔案或登錄檔金鑰。
語法
ByPath (預設值)
Set-Acl
[-Path] <String[]>
[-AclObject] <Object>
[-ClearCentralAccessPolicy]
[-PassThru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ByInputObject
Set-Acl
[-InputObject] <PSObject>
[-AclObject] <Object>
[-PassThru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ByLiteralPath
Set-Acl
[-AclObject] <Object>
-LiteralPath <String[]>
[-ClearCentralAccessPolicy]
[-PassThru]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
此 Cmdlet 只能在 Windows 平臺上使用。
指令 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 Cat.txt 的 ACL 值改為 中的 $DogACL值。
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 的所有文字檔案。
遞迴參數將指令擴展至所有的C:\temp子目錄。
Include 參數限制可檢索的檔案僅限於副檔名為的.txt檔案。
Force 參數則有隱藏檔案,否則會被排除。 (你不能使用 C:\temp\*.txt,因為 遞迴 參數是用於目錄,而非檔案。)
管線操作符(|)將代表取回檔案的物件傳送給 Set-Acl cmdlet,指令碼會將 AclObject 參數中的安全描述符套用到管線中的所有檔案。
實務上,最好在所有可能影響多個項目的指令中使用 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:補助管理員對檔案的完全控制權
$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"
# Set properties
$identity = "BUILTIN\Administrators"
$fileSystemRights = "FullControl"
$type = "Allow"
# Create new rule
$fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type
$newParams = @{
TypeName = 'System.Security.AccessControl.FileSystemAccessRule'
ArgumentList = $fileSystemAccessRuleArgumentList
}
$fileSystemAccessRule = New-Object @newParams
# 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 輸入指令。
參數屬性
| 類型: | Object |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ClearCentralAccessPolicy
移除指定項目中的中央存取政策。
從 Windows Server 2012 起,管理員可以使用 Active Directory 和群組原則來設定使用者和群組的中央存取政策。 更多資訊請參見 動態存取控制:情境概覽。
此參數是在 Windows PowerShell 3.0 中引進的。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | PSPath, LP |
參數集
ByPath
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ByLiteralPath
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Confirm
在執行 Cmdlet 之前,提示您進行確認。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 參見 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Exclude
省略了指定的項目。 此參數的值對 路徑 參數進行限定。 輸入路徑元素或模式,例如 *.txt。 允許使用通配符。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | True |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Filter
指定提供者格式或語言中的過濾器。 此參數的值對 路徑 參數進行限定。 過濾器的語法,包括使用萬用字元,取決於提供者。 過濾器比其他參數更有效率,因為提供者在取回物件時套用這些參數,而不是讓 PowerShell 在取回物件後再過濾。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | True |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Include
只更改指定的項目。 此參數的值對 路徑 參數進行限定。
輸入路徑元素或模式,例如 *.txt。 允許使用通配符。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | True |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-InputObject
變更指定物件的安全描述符。 輸入包含該物件的變數,或輸入取得該物件的指令。
你無法將要更改的物件管道傳送到 Set-Acl。 相反地,請在指令中明確使用 InputObject 參數。
此參數是在 Windows PowerShell 3.0 中引進的。
參數屬性
| 類型: | PSObject |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByInputObject
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-LiteralPath
變更指定項目的安全描述符。 不同於 Path,LiteralPath 參數的值完全按照輸入的方式使用。 不會將任何字元解譯為通配符。 如果路徑包含逸出字元,請以單引弧括住它(')。
單引號會告知PowerShell不要將任何字元解譯為逸出序列。
此參數是在 Windows PowerShell 3.0 中引進的。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | PSPath |
參數集
ByLiteralPath
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-PassThru
回傳一個代表被更改安全描述符的物件。 根據預設,此 Cmdlet 不會產生任何輸出。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Path
變更指定項目的安全描述符。 輸入項目的路徑,例如檔案或登錄鍵的路徑。 允許使用通配符。
如果你將安全物件傳遞給 Set-Acl (無論是使用 AclObject 或 SecurityDescriptor 參數,或是從 傳遞安全物件 Get-Acl 到 Set-Acl),且省略了 Path 參數(名稱與值),則 Set-Acl 會使用安全物件中包含的路徑。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | True |
| 不要顯示: | False |
參數集
ByPath
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-WhatIf
顯示 Cmdlet 執行時會發生什麼事。 指令未執行。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 威斯康辛 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
ObjectSecurity
你可以把 ACL 物件傳入這個 cmdlet。
CommonSecurityDescriptor
你可以在這個 cmdlet 上輸入一個安全描述符。
輸出
None
根據預設,此 Cmdlet 不會傳回任何輸出。
FileSecurity
當你使用 PassThru 參數時,這個 cmdlet 會回傳一個安全物件。 安全物件的類型取決於該物件的類型。
備註
此 Cmdlet 僅適用於 Windows 平臺。
此 Set-Acl cmdlet 由 PowerShell 檔案系統與登錄檔提供者支援。 因此,你可以用它來更改檔案、目錄和登錄檔金鑰的安全描述符。