关于在Windows系统中阻止特定属性.exe文件运行的技术问询
关于在Windows系统中阻止特定属性.exe文件运行的技术问询
当然可以实现!针对你这种不想一刀切拦截所有exe、又要防用户改文件名绕开限制的需求,有几个实用的威慑方案,不用太复杂就能搞定:
用AppLocker创建属性匹配规则(专业/企业版Windows适用)
Windows自带的AppLocker是最靠谱的原生方案,它完全不看文件名,只认文件本身的属性——包括你提到的公司名称、文件描述,甚至文件版本、发布者签名。操作步骤很清晰:- 按下Win+R输入
gpedit.msc打开本地组策略编辑器,定位到「计算机配置>Windows设置>安全设置>应用程序控制策略>AppLocker」 - 右键「可执行规则」选「创建新规则」,向导里先选「拒绝」权限,再指定要限制的用户/组
- 条件选「发布者」,点击「浏览」选中那个要拦的exe,系统会自动提取它的公司名、文件描述等属性
- 你可以调整匹配精度,比如锁定「特定公司+特定文件描述」,这样哪怕用户把文件改名、移到别的文件夹,只要属性没变就会被拦截
- 最后别忘了去服务里启动「Application Identity」(运行
services.msc找到它,设为自动启动),不然AppLocker不会生效
- 按下Win+R输入
PowerShell定时扫描脚本(家庭版Windows适用)
如果是没有组策略的家庭版,写个简单的PowerShell脚本定时扫文件就行。思路是:定期检查指定路径下的exe,匹配目标公司名、文件描述和大小,一旦命中就修改权限阻止执行,或者直接删除(看你需求)。给你个示例脚本:# 替换成你要拦截的文件属性 $targetCompany = "目标公司名称" $targetDescription = "目标文件描述" $targetSize = 1234567 # 文件大小(单位:字节) # 扫描用户目录下的所有exe(可自行修改路径) Get-ChildItem -Path "C:\Users" -Filter *.exe -Recurse -ErrorAction SilentlyContinue | ForEach-Object { $file = Get-Item $_.FullName $fileProps = $file.VersionInfo # 匹配三个属性 if ($fileProps.CompanyName -eq $targetCompany -and $fileProps.FileDescription -eq $targetDescription -and $file.Length -eq $targetSize) { # 拒绝所有人执行该文件,也可以换成Remove-Item删除 icacls $_.FullName /deny Everyone:(X) Write-Host "已阻止违规文件: $($_.FullName)" } }把这个脚本放进任务计划里,设成每小时运行一次,就能起到不错的威慑效果。
这些方案都不是绝对防破解的(比如懂技术的人可能会修改文件属性绕开),但对付普通用户的改名操作完全够用,刚好符合你要的「威慑级」需求。
备注:内容来源于stack exchange,提问作者Michael L




