如何正确判断FileSystemRights是否包含或不包含指定权限?
正确判断FileSystemRights是否包含特定权限的方法
嘿,这个问题我太熟了!FileSystemRights本质是Flags枚举类型,不是普通的字符串数组,所以你直接把它转成字符串用-contains肯定行不通——-contains是用来检查数组元素的,而ToString()输出的只是单个带逗号分隔的文本值,根本不是数组,自然匹配失败。
下面给你两种可行的方法,优先推荐第一种:
方法一:使用位运算(推荐,最可靠)
因为FileSystemRights是标记枚举(FlagsAttribute),每个权限对应一个独立的二进制位,所以用PowerShell的按位与运算符-band来判断是最标准的做法:
# 假设$fsr是你获取到的FileSystemRights对象 $targetRight = [System.Security.AccessControl.FileSystemRights]::ReadAndExecute if ($fsr -band $targetRight) { Write-Host "✅ 包含ReadAndExecute权限" } else { Write-Host "❌ 不包含ReadAndExecute权限" }
原理很简单:如果$fsr的权限集合里包含目标权限,那么按位与的结果就会等于目标权限的枚举值,条件返回$true;反之则为$false。
方法二:字符串匹配(应急可用,不推荐)
如果你只是临时测试,也可以通过字符串匹配来判断,但要注意用单词边界避免误匹配(比如防止类似ReadAndExecuteExtended这种长权限被误判):
if ($fsr.ToString() -match '\bReadAndExecute\b') { Write-Host "包含ReadAndExecute权限" }
⚠️ 注意:这种方法依赖ToString()的输出格式,一旦.NET框架对枚举的字符串输出逻辑有调整,就可能失效,所以不推荐在生产脚本里使用。
内容的提问来源于stack exchange,提问作者Thypari
相关产品推荐
相关产品推荐

