【PowerShell】特定のファイル削除をPowerShellで禁止する
フォルダの中にあるリンクをユーザに削除させたくないのだが、と相談されました。
リンク先のフォルダを直リンクでしか見れないようにしてるのでリンクがなくなったら困るのだそうで。
PowerShell5.1で作ったscriptがこちら。やっていることは、
- ルートのフォルダの配下にある*.lnkに対してACLオブジェクト(ルール)を追加。ルートのフォルダは-ParentFolderで変更可能。
- アクセス制御リスト(ACL)のデフォルトは「特定のGroupに削除(Delete)を禁止(Deny)」。-AclParamオプションで変更可能。
- -Groupオプションでグループの指定も変更可能。
Param(
$Group = "Domain\UserGroupName",
$AclParam = @($Group ,"Delete", "Deny"),
$ParentFolder = "\\共有フォルダ"
)
$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule $AclParam
$Folders = Get-ChildItem -Path $ParentFolder -Attributes Directory [ -Filter "フォルダ名規則"]
foreach ($Folder in $TeamFolders){
Get-ChildItem -path $Folder.fullname -filter "*.lnk"|ForEach-Object{
$Acl = Get-Acl $_.FullName
$Acl.Path
#処理対象のlnkパス
$Acl.AddAccessRule($Rule)
#ルールをACLオブジェクトに追加
$Acl|Set-Acl $_.FullName
#ACLオブジェクトを対象lnkファイルに設定
}
}
フォルダとリンクをGet-ChildItemするときのFilterを書き換えてやれば流用が効くはず。

