【PowerShell】特定のファイル削除をPowerShellで禁止する

フォルダの中にあるリンクをユーザに削除させたくないのだが、と相談されました。
リンク先のフォルダを直リンクでしか見れないようにしてるのでリンクがなくなったら困るのだそうで。

PowerShell5.1で作ったscriptがこちら。やっていることは、

  1. ルートのフォルダの配下にある*.lnkに対してACLオブジェクト(ルール)を追加。ルートのフォルダは-ParentFolderで変更可能。
  2. アクセス制御リスト(ACL)のデフォルトは「特定のGroupに削除(Delete)を禁止(Deny)」。-AclParamオプションで変更可能。
  3. -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 ($TeamFolder 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を書き換えてやれば流用が効くはず。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください