如何通过PowerShell脚本切换目录的加密属性?
目录加密属性说明与需求实现
目录的加密属性仅作为标记,指示其所有子项都应被加密。
针对文件,可通过以下命令切换加密状态:
(Get-Item -Path filename).Decrypt() (Get-Item -Path filename).Encrypt()
这些方法定义在FileInfo类中,DirectoryInfo类不存在此类方法。无论文件还是目录,都无法直接通过修改属性值的方式切换加密状态,例如以下操作无效:
(Get-Item -Path filename).Attributes -= 'Encrypted'
备注:直接修改属性的方式适用于
Archive、ReadOnly等属性,但不适用于Compressed、Encrypted、Directory等属性。
需求与问题
需要实现以下操作:
- 在已加密的目录内创建新目录
- 将该新目录的加密属性设为false
- 向新目录添加文件时,文件不会自动被加密
不接受先填充目录再逐个调用Decrypt()的方案,因为无法解决新文件自动加密的问题。
解决方案:可以实现
核心思路是打破EFS的加密继承链,通过修改新目录的权限继承设置,阻止子项自动继承加密属性。以下是PowerShell脚本实现:
# 配置路径 $parentEncryptedDir = "C:\示例\已加密目录" $newDirName = "未加密子目录" $newDirPath = Join-Path -Path $parentEncryptedDir -ChildPath $newDirName # 1. 在已加密目录内创建新目录 New-Item -Path $newDirPath -ItemType Directory -Force # 2. 取消加密继承并重新赋予权限,阻止自动加密 icacls $newDirPath /inheritance:e /remove:g "Authenticated Users" "SYSTEM" "Administrators" icacls $newDirPath /grant:r "Authenticated Users:(OI)(CI)F" icacls $newDirPath /grant:r "SYSTEM:(OI)(CI)F" icacls $newDirPath /grant:r "Administrators:(OI)(CI)F" # 验证新目录属性(应无Encrypted标记) Get-Item $newDirPath | Select-Object Name, Attributes
原理说明
已加密目录的加密属性会让新创建的子项自动继承加密规则,通过icacls命令重置权限继承并重新赋予完整控制权限,可切断EFS的加密继承关联。后续在该新目录中创建或复制的文件,均不会自动被加密。
内容的提问来源于stack exchange,提问作者darda
相关产品推荐
相关产品推荐

