2016-07-25 77 views
1

我正在使用PowerShell脚本,我一直在使用枚举类型时遇到困难。我对SharePoint Online执行REST调用以获取有关特定组的信息。在PowerShell中访问枚举名称

$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]一个枚举。我无法访问assciated枚举值的名称属性。目前,我正在做这样的,但它似乎可怕的错误:

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,我怎么能更直接地访问枚举的名字而不是看似janky实施我想到了?

回答

3

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

[System.AttributeTargets]4096 

这导致

Delegate 

如果你需要纯字符串,请致电ToString()为未如下

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

当然,如果我理解你的问题。你想创建一个反向映射的整数值到各自的角色名称,所以你可以通过它们的整数值获取名称?可以用一个哈希表来实现,如下所示:

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

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

有了该地图,你可以看看这名字是这样的:

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

我不希望做一个反向查找,但我觉得我的实现是可怕的。必须有一种原生的方式来做到这一点,我并没有把握。 –

+0

呃...我刚刚贴了一张?当然,如果你已经有一个'RoleType'对象而不是数字值,你应该可以通过调用它的'ToString()'方法来获得名字,如[这个答案]中所建议的(http://stackoverflow.com /一个/1630171分之38568919)。 –