gpt4 book ai didi

windows - 如何使用 Powershell 与 FileSystemRights 进行比较?

转载 作者:可可西里 更新时间:2023-11-01 13:54:37 26 4
gpt4 key购买 nike

我想检查给定用户是否有权访问给定文件夹 - 通过检查他们是否具有分配给他们的“修改”访问权限。

我认为那个的 PS 是:

(Get-Acl .\myfolder).Access | ?{$_.IdentityReference -eq "BUILTIN\Users"} |?{$_.filesystemrights.value -contains "Modify"} 

但是最后一部分不起作用 - 我没有得到任何结果。但我知道他们有修改权限——如果我输入:

(Get-Acl .\myfolder).Access | ?{$_.IdentityReference -eq "BUILTIN\Users"} | select -ExpandProperty filesystemrights

然后我回来了:

Modify, Synchronize
ReadAndExecute, Synchronize

这是因为 FileSystemRights 属性是一个枚举吗?如果是这样,我该如何测试它?

最佳答案

这是一个类型问题。 (Get-Acl .\myfolder).Access[].FileSystemRights 属于 System.Security.AccessControl.FileSystemRights 类型。它并没有真正显示一个字符串。要使其成为字符串,只需使用 ToString() 方法:

(Get-Acl .\myfolder).Access | ?{$_.IdentityReference -eq "BUILTIN\Users"} |?{$_.filesystemrights.ToString() -contains "Modify"} 

或者你可以使用按位比较的方法。但是,当您想使用它时很容易混淆:

($_.FileSystemRights -band [System.Security.AccessControl.FileSystemRights]::Modify) -eq [System.Security.AccessControl.FileSystemRights]::Modify

当你想用这个的时候:

($_.FileSystemRights -band [System.Security.AccessControl.FileSystemRights]::Modify) -eq $_.FileSystemRights

它们的含义截然不同。例如,如果您拥有完全控制,则前一个测试仍然成立。那是你要的吗?或者您想知道什么时候 FileSystemRights 字面上只是修改

此外,[System.Security.AccessControl.FileSystemRights] 是一个不完整的枚举。在我的环境中,我发现我需要这张表:

+-------------+------------------------------+------------------------------+
| Value | Name | Alias |
+-------------+------------------------------+------------------------------+
| -2147483648 | GENERIC_READ | GENERIC_READ |
| 1 | ReadData | ListDirectory |
| 1 | ReadData | ReadData |
| 2 | CreateFiles | CreateFiles |
| 2 | CreateFiles | WriteData |
| 4 | AppendData | AppendData |
| 4 | AppendData | CreateDirectories |
| 8 | ReadExtendedAttributes | ReadExtendedAttributes |
| 16 | WriteExtendedAttributes | WriteExtendedAttributes |
| 32 | ExecuteFile | ExecuteFile |
| 32 | ExecuteFile | Traverse |
| 64 | DeleteSubdirectoriesAndFiles | DeleteSubdirectoriesAndFiles |
| 128 | ReadAttributes | ReadAttributes |
| 256 | WriteAttributes | WriteAttributes |
| 278 | Write | Write |
| 65536 | Delete | Delete |
| 131072 | ReadPermissions | ReadPermissions |
| 131209 | Read | Read |
| 131241 | ReadAndExecute | ReadAndExecute |
| 197055 | Modify | Modify |
| 262144 | ChangePermissions | ChangePermissions |
| 524288 | TakeOwnership | TakeOwnership |
| 1048576 | Synchronize | Synchronize |
| 2032127 | FullControl | FullControl |
| 268435456 | GENERIC_ALL | GENERIC_ALL |
| 536870912 | GENERIC_EXECUTE | GENERIC_EXECUTE |
| 1073741824 | GENERIC_WRITE | GENERIC_WRITE |
+-------------+------------------------------+------------------------------+

比较这些输出很有趣:

[System.Enum]::GetNames([System.Security.AccessControl.FileSystemRights]);
[System.Enum]::GetNames([System.Security.AccessControl.FileSystemRights]) | % { "$($_.ToString())`t`t$([System.Security.AccessControl.FileSystemRights]$_.ToString())`t`t$(([System.Security.AccessControl.FileSystemRights]$_).value__)";}
[System.Enum]::GetValues([System.Security.AccessControl.FileSystemRights]) | % { "$($_.ToString())`t`t$(($_).value__)";}

GENERIC 权限未在 .Net 类中枚举,但如果枚举足够多的文件,您将看到该数值。

祝你好运!

关于windows - 如何使用 Powershell 与 FileSystemRights 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com