Set-Acl

ファイルやレジストリ キーなど、指定した項目のセキュリティ記述子を変更します。

構文

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>]

説明

このコマンドレットは、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 使用して、Dog.txt ファイルのセキュリティ記述子を取得します。 代入演算子 (=) は、セキュリティ記述子を$DogACL変数の値に格納します。

2 番目のコマンドは Set-Acl 、Cat.txt $DogACLの ACL 内の値を .

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 使用して、Dog.txt ファイルのセキュリティ記述子を取得します。 パイプライン演算子 (|) は、Dog.txtセキュリティ記述子を表すオブジェクトをコマンドレットに Set-Acl 渡します。

2 番目のコマンドは、Dog.txtのセキュリティ記述子をCat.txtに適用するために使用 Set-Acl します。 コマンドが完了すると、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 コマンドレットを使用して、ディレクトリ内のすべてのテキスト ファイルを C:\Temp 取得します。 Recurse パラメーターは、コマンドをすべてのサブディレクトリC:\tempに拡張します。 Include パラメーターは、取得したファイルをファイル名拡張子を持つファイルに.txt制限します。 Force パラメーターは、隠しファイルを取得します。このパラメーターが指定されない場合、隠しファイルは除外されます (Recurse パラメーターはファイルではなくディレクトリで動作するため、使用c:\temp\*.txtできません)。

パイプライン演算子 (|) は、取得したファイルを表すオブジェクトをコマンドレットに Set-Acl 送信します。このオブジェクトは、 AclObject パラメーターのセキュリティ記述子をパイプライン内のすべてのファイルに適用します。

実際には、複数の項目に影響を与える可能性があるすべてのSet-Aclコマンドで WhatIf パラメーターを使用することをお勧めします。 この場合、パイプラインの 2 番目のコマンドは 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 使用して、Dog.txt ファイルのセキュリティ記述子を取得します。

次に、継承されたアクセス規則を明示的なアクセス規則に変換する変数が作成されます。 これに関連付けられているアクセス規則を継承から保護するには、変数$true$isProtected . 継承を許可するには、次に設定 $isProtected します $false。 詳細については、「 アクセス規則の保護の設定」を参照してください。

継承された $preserveInheritance アクセス規則を保持するか $true 、継承されたアクセス規則 $false を削除するように変数を設定します。 その後、 SetAccessRuleProtection() メソッドを使用してアクセス規則の保護が更新されます。

最後のコマンドは、Dog.txtのセキュリティ記述子を適用するために使用 Set-Acl します。 コマンドが完了すると、Pets フォルダーから継承されたDog.txtの ACL が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 使用して、Dog.txt ファイルのセキュリティ記述子を取得します。

次の変数が作成され、 BUILTIN\Administrators グループにDog.txt ファイルの完全な制御が付与されます。 $identityユーザー アカウントの名前に設定された変数。 変数は $fileSystemRights FullControl に設定され、アクセス規則に関連付けられている操作の種類を指定する FileSystemRights 値のいずれかになります。 $type操作を許可または拒否するかどうかを指定する変数を "許可" に設定します。 この $fileSystemAccessRuleArgumentList 変数は、新しい FileSystemAccessRule オブジェクトを作成するときに渡される引数リストです。 次に、新しい FileSystemAccessRule オブジェクトが作成され、 FileSystemAccessRule オブジェクトが SetAccessRule() メソッドに渡され、新しいアクセス規則が追加されます。

最後のコマンドは、Dog.txtのセキュリティ記述子を適用するために使用 Set-Acl します。 コマンドが完了すると、 BUILTIN\Administrators グループがDog.txtを完全に制御できるようになります。

パラメーター

-AclObject

目的のプロパティの値を備えた ACL を指定します。 Set-Acl は、 Path または InputObject パラメーターで指定された項目の ACL を、指定されたセキュリティ オブジェクトの値と一致するように変更します。

コマンドの出力を Get-Acl 変数に保存し、 AclObject パラメーターを使用して変数を渡すか、コマンドを Get-Acl 入力します。

Type:Object
Position:1
Default value:None
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
Accept pipeline input:False
Accept wildcard characters:False
-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

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

指定した項目を除外します。 このパラメーターの値は、Path パラメーターを修飾します。 パス要素またはパターンを入力します (例: *.txt. ワイルドカードを使用できます。

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

プロバイダーの形式や言語でフィルターを指定します。 このパラメーターの値は、Path パラメーターを修飾します。 ワイルドカードを使用できるかどうかなど、フィルターの構文はプロバイダーによって異なります。 フィルターは、取得後に PowerShell でオブジェクトをフィルター処理するのではなく、オブジェクトを取得するときにフィルターを適用するため、他のパラメーターよりも効率的です。

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

指定した項目だけを変更します。 このパラメーターの値は、Path パラメーターを修飾します。 パス要素またはパターンを入力します (例: *.txt. ワイルドカードを使用できます。

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

指定されたオブジェクトのセキュリティ記述子を変更します。 オブジェクトが格納されている変数、またはオブジェクトを取得するコマンドを入力します。

変更 Set-Aclするオブジェクトをパイプすることはできません。 代わりに、InputObject パラメーターをコマンド内で明示的に使用します。

このパラメーターは Windows PowerShell 3.0 で導入されました。

Type:PSObject
Position:0
Default value:None
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
Accept pipeline input:True
Accept wildcard characters:False
-Passthru

変更されたセキュリティ記述子を表すオブジェクトを返します。 既定では、このコマンドレットによる出力はありません。

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

指定した項目のセキュリティ記述子を変更します。 ファイルまたはレジストリ キーへのパスなどの項目へのパスを入力します。 ワイルドカードを使用できます。

(AclObject または SecurityDescriptor パラメーターを使用するか、Get-AclからSet-Aclセキュリティ オブジェクトを渡すことによって) セキュリティ オブジェクトSet-Aclを渡し、Path パラメーター (名前と値) を省略した場合は、Set-Aclセキュリティ オブジェクトに含まれるパスを使用します。

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

コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。

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

入力

System.Security.AccessControl.ObjectSecurity, System.Security.AccessControl.CommonSecurityDescriptor

ACL オブジェクトまたはセキュリティ記述子 Set-Aclをパイプできます。

出力

FileSecurity

既定では、 Set-Acl 出力は生成されません。 ただし、Passthru パラメーターを使用すると、セキュリティ オブジェクトを生成します。 セキュリティ オブジェクトの種類は、項目の種類に応じて異なります。

メモ

このコマンドレットは、Windows プラットフォームでのみ使用できます。

この Set-Acl コマンドレットは、PowerShell ファイル システムとレジストリ プロバイダーによってサポートされています。 そのため、そのコマンドレットを使用して、ファイル、ディレクトリ、およびレジストリ キーのセキュリティ記述子を変更できます。