PowerShell 枚举评估

PowerShell Enum Evaluation

我正在尝试编写一个脚本来将权限部署到 Azure 数据湖。我想在添加更多权限之前测试现有权限,但在使用枚举时无法完成。

获取权限的脚本是:

$ctx = New-AzStorageContext -StorageAccountName 'mylake' -UseConnectedAccount
$FilesystemName = "lake"
$path = "folder"
$acl = (Get-AzDataLakeGen2Item -Context $ctx -FileSystem $FileSystemName -Path $Path).ACL

$acl 现在是一个 PSPathAccessControlEntry 数组。 如果我 运行 $acl[0].Permissions.GetType() 我得到:

Name: RolePermissions
BaseType: System.Enum

$acl[0].Permissions returns:

Execute, Read

我想测试枚举是否包含“读取”。但是我找不到任何方法来评估它。我发现了很多关于创建新枚举和使用它们的帖子,但是找不到关于在导入的模块中使用枚举的任何内容(你还没有声明)

例如, [enum]::GetNames([RolePermissions]) 之类的东西将无法使用,因为它找不到该名称,是否有其他方法可以引用它?

假设 RolePermissions 值类似于您描述的值:

using namespace Azure.Storage.Files.DataLake.Models
$Permissions = [RolePermissions]'Execute, Read'

...有两种方法可以评估$Permissions值是否具有Read标志:

使用Enum.HasFlag()

我们可以做到:

PS ~> $Permissions.HasFlag([RolePermissions]::Read)
True

做数学运算

由于枚举标志是使用按位运算组合的,我们可以使用按位运算符来查询它们:

PS ~> ($Permissions -band [RolePermissions]::Read) -eq [RolePermissions]::Read
True

与 PowerShell 中的任何其他重载二元运算符一样,-band 默认为左侧参数的类型,因此我们可以只传递标签名称:

PS ~> ($Permissions -band 'Read') -eq 'Read'
True