次の方法で共有


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 の ACL の値を $DogACLの値に変更します。

Path パラメーターの値は、Cat.txt ファイルへのパスです。 AclObject パラメーターの値はモデル ACL です。この場合、$DogACL 変数に保存された Dog.txt の 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 番目のコマンドでは、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 コマンドレットを使用して、C:\Temp ディレクトリ内のすべてのテキスト ファイルを取得します。 Recurse パラメーターは、コマンドを C:\tempのすべてのサブディレクトリに拡張します。 Include パラメーターは、取得されるファイルを、.txt ファイル名拡張子を持つファイルに制限します。 Force パラメーターは非表示のファイルを取得します。それ以外の場合は除外されます。 (c:\temp\*.txt パラメーターはファイルではなくディレクトリで動作するため、は使用できません)。

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

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

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

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

最後のコマンドでは、Set-Acl を使用して、Dog.txtのセキュリティ記述子を適用します。 コマンドが完了すると、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
$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 コマンドレットを使用して、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-AclPath または inputObject パラメーター で指定された項目の ACL を、指定したセキュリティ オブジェクトの値と一致するように変更します。

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

型:Object
配置:1
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-ClearCentralAccessPolicy

指定した項目から集約型アクセス ポリシーを削除します。

Windows Server 2012 以降では、管理者は Active Directory とグループ ポリシーを使用して、ユーザーとグループの集約型アクセス ポリシーを設定できます。 詳細については、「動的アクセス制御: シナリオの概要」を参照してください。

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

型:SwitchParameter
Aliases:PSPath, LP
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Confirm

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

型:SwitchParameter
Aliases:cf
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Exclude

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

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Filter

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

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Include

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

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-InputObject

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

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

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

型:PSObject
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-LiteralPath

指定した項目のセキュリティ記述子を変更します。 Pathとは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符 (') で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

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

型:String[]
Aliases:PSPath
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-PassThru

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

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Path

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

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

型:String[]
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:True

-WhatIf

コマンドレットを実行した場合の動作を示します。 コマンドレットは実行されません。

型:SwitchParameter
Aliases:wi
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

ObjectSecurity

ACL オブジェクトをこのコマンドレットにパイプできます。

CommonSecurityDescriptor

セキュリティ記述子をこのコマンドレットにパイプできます。

出力

None

既定では、このコマンドレットは出力を返しません。

FileSecurity

PassThru パラメーターを使用すると、このコマンドレットはセキュリティ オブジェクトを返します。 セキュリティ オブジェクトの種類は、アイテムの種類によって異なります。

メモ

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

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