【问题标题】:Accessing enum name in PowerShell在 PowerShell 中访问枚举名称
【发布时间】:2016-11-28 19:44:59
【问题描述】:

我正在编写一个 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,我怎样才能更直接地访问枚举的名称,而不是使用我想出的看似笨拙的实现?

【问题讨论】:

    标签: rest powershell enums office365 sharepoint-online


    【解决方案1】:

    据我所知,您可以使用强制转换:

    [System.AttributeTargets]4096
    

    这会导致

    Delegate
    

    如果您需要纯字符串,请按如下方式调用ToString()

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 我确实想做反向查找,但我觉得我的实现很糟糕。必须有一种我没有掌握的本地方法。
      • 嗯...我刚刚发布了一个?当然,如果您已经有一个 RoleType 对象,而不仅仅是数值,您应该能够按照 this answer 中的建议通过调用其 ToString() 方法来获取名称。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 2011-07-09
      • 2012-12-28
      相关资源
      最近更新 更多