Set-Acl
變更指定資源 (如檔案或登錄機碼) 的安全性描述元。
語法
Set-Acl [-Path] <string[]> [-AclObject] <ObjectSecurity> [-Exclude <string[]>] [-Filter <string>] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]
描述
Set-Acl Cmdlet 會變更指定之資源 (如檔案或登錄機碼) 的安全性描述元,以符合您所提供之安全性描述元中的值。
若要使用 Set-Acl,請使用 Path 參數來識別要變更其安全性描述元的資源,並使用 AclObject 參數來提供要套用其值的安全性描述元。Set-Acl 會使用 AclObject 參數的值做為模型,並變更資源之安全性描述元中的值,以符合 AclObject 參數所指定之安全性描述元中的值。
參數
-AclObject <ObjectSecurity>
使用所要的屬性值指定 ACL。Set-Acl 會將 Path 參數所指定資源的 ACL 變更為符合指定的安全性物件中的值。
您可以將 Get-Acl 命令的輸出儲存至變數,再使用 AclObject 參數來傳遞變數,或是輸入 Get-Acl 命令。
必要? |
true |
位置? |
2 |
預設值 |
|
接受管線輸入? |
true (ByValue) |
接受萬用字元? |
false |
-Exclude <string[]>
忽略指定的項目。此參數的值用於限定 Path 參數。輸入路徑元素或模式,例如 "*.txt"。允許使用萬用字元。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Filter <string>
指定以提供者的格式或語言表示的篩選器。此參數的值用於限定 Path 參數。篩選器的語法 (包括萬用字元的用法) 依提供者而定。篩選器比其他參數更有效率,因為提供者會在擷取物件時套用篩選器,而非等到 Windows PowerShell 擷取物件後才進行篩選。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Include <string[]>
只變更指定的項目。此參數的值用於限定 Path 參數。輸入路徑元素或模式,例如 "*.txt"。允許使用萬用字元。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-PassThru
傳回代表安全性描述元的物件。根據預設,此 Cmdlet 不會產生任何輸出。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Path <string[]>
識別要變更其安全性描述元的資源。輸入資源的路徑,例如檔案或登錄機碼的路徑。允許使用萬用字元。
若將安全性物件傳遞給 Set-Acl (使用 AclObject 參數,或從 Get-Acl 傳遞物件給 Set-Acl) 並且省略 Path 參數 (名稱和值),Set-Acl 會使用包含在安全性物件中的路徑。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-Confirm
在執行命令前先提示確認。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-WhatIf
說明執行命令時將會發生何種情況,但不會實際執行命令。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-UseTransaction
將命令加入現用交易中。此參數只有當交易進行中時才有效。如需詳細資訊,請參閱 about_Transactions。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
System.Security.AccessControl.ObjectSecurity 您可經由管道將安全性描述元輸出至 Set-Acl。 |
輸出 |
無或安全性物件 根據預設,Set-Acl 不會產生任何輸出。不過,如果您使用 -Passthru 參數,它就會產生安全性物件。安全性物件的類型是依資源類型而定。 |
附註
Windows PowerShell FileSystem 和 Registry 提供者支援 Set-Acl Cmdlet。因此,您可以用它來變更檔案、目錄和登錄機碼的安全性描述元。
若要為參數指定多重數值,請使用逗號來分隔數值。例如:"<參數名稱> <值1>, <值2>"。
範例 1
C:\PS>$DogACL = get-acl c:\dog.txt
C:\PS>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 的 ACL (儲存於 $DogACL 變數)。
範例 2
C:\PS>get-acl c:\dog.txt | set-acl -path C:\cat.txt
描述
-----------
這個命令與前一個範例中的命令幾乎相同,只是使用了管線運算子將 Get-Acl 命令中擷取的安全性描述元傳送至 Set-Acl 命令。
第一個命令會使用 Get-Acl Cmdlet 取得 Dog.txt 檔案的安全性描述元。管線運算子 (|) 將代表 Dog.txt 安全性描述元的物件傳遞給 Set-Acl 命令。
第二個命令會使用 Set-Acl,將 Dog.txt 的安全性描述元套用至 Cat.txt。當命令完成時,Dog.txt 與 Cat.txt 檔案的 ACL 將會完全相同。
範例 3
C:\PS>$newACL = get-acl file0.txt
C:\PS>get-childitem 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 命令,後者再將 AclObject 參數中的安全性描述元套用至管線中的所有檔案。
實際上,最好的作法是使用 Whatif 參數搭配所有可影響多個資源的 Set-Acl 命令。在此例中,管線中的第二個命令將會是 "set-acl -aclobject $newacl -whatif"。這個命令會列出受到命令影響的檔案。在檢閱結果之後,您可以再一次執行此命令,但是這次不使用 Whatif 參數。