Добавление пользовательского утверждения в политику веб-приложения SharePoint 2010 с помощью PowerShell

Добавление пользовательского утверждения в политику веб-приложения SharePoint 2010 с помощью PowerShell

Сделать это оказалось труднее, чем ожидалось, однако, дойдя до конца, я понял, что на самом деле все гораздо легче, поэтому я решил поделиться здесь своим опытом.  Итак, задача состоит в том, чтобы добавить пользовательское утверждение в политику веб-приложения с помощью PowerShell.  Через пользовательский интерфейс центра администрирования все это делается довольно просто.  Однако, взявшись за PowerShell, я сначала решил создать New-SPClaimsPrincipal, чтобы добавить политики для зоны.  Ради интереса перечислю все методы, которые я перепробовал (причем это далеко не все варианты, которые я прикидывал):

#$tp = Get-SPTrustedIdentityTokenIssuer -Identity "ADFS with Roles"
#$cp = Get-SPClaimProvider -Identity "BasketballTeamProvider"

#$account = New-SPClaimsPrincipal -ClaimValue "DVK Jovenut" -ClaimType "Role" -TrustedIdentityTokenIssuer $tp
#$account = New-SPClaimsPrincipal -Identity "DVK Jovenut" -TrustedIdentityTokenIssuer $tp
#$account = New-SPClaimsPrincipal -Identity "c:0ǹ.c|basketballteamprovider|dvk jovenut" -IdentityType EncodedClaim
#$account = New-SPClaimsPrincipal -ClaimValue "DVK Jovenut" -ClaimType "http://schema.steve.local/teams" -ClaimProvider $cp.ClaimProvider
#$account = New-SPClaimsPrincipal -EncodedClaim "c:0ǹ.c|basketballteamprovider|dvk jovenut"

Многие из этих способов позволяли успешно добавить утверждение, но это был, очевидно, не тот идентификатор, поскольку реализовать политику не удавалось (т. е. я предоставлял полный доступ, но пользователи с этим утверждением не могли войти в систему).  Это я и имел в виду, когда говорил, что все оказалось труднее, чем ожидалось.  В итоге выяснилось, что на самом деле объект New-SPClaimsPrincipal вообще не нужен.  Вот код PowerShell, который корректно добавляет утверждение:

$WebAppName = "https://fc1"

$wa = get-SPWebApplication $WebAppName

$account = "c:0ǹ.c|basketballteamprovider|dvk jovenut"

$zp = $wa.ZonePolicies("Default")
$p = $zp.Add($account,"Claims Role")
$fc=$wa.PolicyRoles.GetSpecialRole("FullControl")
$p.PolicyRoleBindings.Add($fc)
$wa.Update()

В общем, оказалось, что достаточно добавить пользовательское утверждение как простую строку.  Кстати, для получения значения $account я просто сначала добавил политику через центр администрирования, а потом скопировал отображенное там значение утверждения.  Надеюсь, это поможет вам в будущем сэкономить время, если вам придется решать ту же задачу.

Это локализованная запись блога. Оригинал статьи см. по ссылке Adding A Custom Claim to a Web App Policy via PowerShell in SharePoint 2010