2016-07-25 30 views
1

Ich arbeite an PowerShell ein Skript und ich hatte eine schwierige Zeit mit Enum-Typen. Ich führe einen REST-Aufruf für SharePoint Online aus, um Informationen zu einer bestimmten Gruppe abzurufen.Zugriff auf enum Name in PowerShell

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

Es ein int zurückgibt, RoleTypeKind, das ist eine Enum in [Microsoft.SharePoint.Client.RoleType]. Ich habe Schwierigkeiten beim Zugriff auf die name-Eigenschaft des zugehörigen enum-Wertes. Ich mache es zur Zeit wie diese, aber es scheint schrecklich falsch:

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 
     } 
    } 
} 

Zu wissen, dass $group.RoleDefinitionBindings.results[0].RoleTypeKind die richtige int der Enumeration zurück, wie kann es mehr direkt den Namen der ENUM-Zugriff statt mit der scheinbar janky Umsetzung Ich habe es mir ausgedacht?

Antwort

3

Soweit ich weiß man einfach Gießen verwenden können:

[System.AttributeTargets]4096 

Dies führt zu

Delegate 

Wenn Sie Normal String benötigen, rufen ToString()

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

Nicht sicher, wenn ich deine Frage verstehe. Möchten Sie eine umgekehrte Zuordnung der Integer-Werte zu den jeweiligen Rollennamen erstellen, damit Sie die Namen nach ihrem ganzzahligen Wert abrufen können? Das kann mit einem Hash-Tabelle, wie dies erreicht werden:

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

Die value__ Eigenschaft gibt den numerischen Wert eines Aufzählungspunkt, während die ToString() Methode seine Zeichenfolge Wert zurückgibt, das heißt seinen Namen.

Mit dieser Karte, die Sie den Namen wie folgt aussehen kann:

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

Ich will ein Reverse-Lookup zu tun, aber ich fühle, dass meine Implementierung ist schrecklich. Es muss einen nativen Weg geben, den ich nicht verstehe. –

+0

Umm ... Ich habe gerade einen gepostet? Wenn Sie bereits ein 'RoleType'-Objekt anstelle des numerischen Werts haben, sollten Sie den Namen natürlich erhalten, indem Sie die Methode' ToString() 'wie in [diese Antwort] vorgeschlagen (http://stackoverflow.com) aufrufen/a/38568919/1630171). –