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
我正在尝试编写一个脚本来将权限部署到 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