在PowerShell中访问枚举名称

时间:2016-07-25 12:47:31

标签: rest powershell enums office365 sharepoint-online

我正在使用PowerShell编写脚本,并且我使用枚举类型时遇到了困难。我对SharePoint Online执行REST调用以获取有关特定组的信息。

$group = Invoke-SPORestMethod -Url "https://tenant.sharepoint.com/sites/site/_api/web/RoleAssignments/GetByPrincipalId(8)?`$expand=RoleDefinitionBindings"
$group.RoleDefinitionBindings.results[0].RoleTypeKind

它返回一个int,RoleTypeKind,它是[Microsoft.SharePoint.Client.RoleType]中的枚举。我无法访问相关枚举值的name属性。我现在这样做,但看起来非常错误:

function getGroupPermissionKind([int]$roleType){
    #https://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.client.roletype.aspx
    [Enum]::GetValues([Microsoft.SharePoint.Client.RoleType]) | foreach {
        $Name = $_
        $Value = ([Microsoft.SharePoint.Client.RoleType]::$_).value__
        if ($Value -eq $roleType){
            return $Name
        }
    }
}

知道$group.RoleDefinitionBindings.results[0].RoleTypeKind返回枚举的正确int,我怎样才能更直接地访问枚举的名称而不是我想出的看似笨拙的实现?

2 个答案:

答案 0 :(得分:3)

据我所知,你可以使用铸造:

[System.AttributeTargets]4096

这导致

Delegate

如果您需要普通字符串,请按以下方式致电ToString()

([System.AttributeTargets]4096).ToString()

答案 1 :(得分:0)

不确定我是否理解你的问题。是否要创建整数值到相应角色名称的反向映射,以便可以通过整数值获取名称?这可以通过哈希表实现,如下所示:

$map = @{}
[enum]::GetValues([Microsoft.SharePoint.Client.RoleType]) | ForEach-Object {
  $map[$_.value__] = $_.ToString()
}

value__属性返回枚举项的数值,而ToString()方法返回其字符串值,即其名称。

使用该地图,您可以像这样查找名称:

$map[$group.RoleDefinitionBindings.results[0].RoleTypeKind]