2015-06-03 2 views
-1

Я пытаюсь добавить новые группы и добавлять пользователей в группы SharePoint с помощью PowerShell. Пока у меня есть этот скрипт, который выполняет эту задачу. Я хочу изменить сценарий, чтобы он мог читать текстовый файл с группами и пользователями в этом формате (или рекомендовать другой способ сделать это).чтение пользовательских/групповых сопоставлений из файла

Group1 

User1,User2,User3 etc. 


Group2 

User5,User7 etc. 

Может кто-нибудь, пожалуйста, сообщите мне, как я могу достичь этой задачи?

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue 
$SiteUrl = "http://www.dev.com" 
$Web = Get-SPWeb $SiteUrl 

$description = "Group with contribute access." 
$permissionLevel = "Contribute" 

$groups = "1", "2" 

foreach($groupName in $groups) 
{ 
    $web.SiteGroups.Add($groupName, $web.SiteUsers["Test\data"], $web.SiteUsers["Test\data"], $description) 
    $group = $web.SiteGroups[$groupName] 
    $loc = Get-Location  
    $Users = "Test\data"  
    $roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($group) 
    $roleDefinition = $web.Site.RootWeb.RoleDefinitions[$permissionLevel] 
    $roleAssignment.RoleDefinitionBindings.Add($roleDefinition) 
    $web.RoleAssignments.Add($roleAssignment) 
    $web.Update() 
    foreach ($User in $Users) { 
     $Web.EnsureUser($User) 
     Set-SPUser -Identity $User -Web $SiteUrl -Group $group 
    } 

} 

$Web.Dispose(); 

ответ

0

Если у вас есть большой входной файл я разбить файл несколькими способами:

  1. на 3 последовательных разрывов строк, чтобы отделить группы друг от друга,
  2. на 2 последовательных разрывов строк чтобы отделить список пользователей от имени группы,
  3. в запятую, чтобы получить список имен пользователей.

Что-то вроде этого нужно сделать:

(Get-Content 'C:\temp\test.txt' -Raw) -split "`r`n`r`n`r`n" | ? { $_ } | % { 
    $group, $userlist = $_ -split "`r`n`r`n" 
    $users = $userlist -split ',' 

    # do stuff with $group and $users 
} 

Обратите внимание, что параметр -Raw требует PowerShell v3 или более поздней версии. При использовании более старых версий -join до -split:

(Get-Content 'C:\temp\test.txt') -join "`r`n" -split "`r`n`r`n`r`n" | ... 
+0

Спасибо за ответ Ansgar, но это не работает должным образом. Я обновлю свой вопрос с новым форматом, который мне нравится, но он работает неправильно. Имя $ group показывает все значения Пользователя и $ Пользователь пуст – sp9

+0

@ sp9 Если у вас есть 3 разрыва строки между группами и 2 разрыва строки между группой и списком пользователей, вам нужно, конечно, настроить шаблоны расщепления. См. Обновленный ответ. BTW, это было бы намного проще, если бы вы выбрали более удобный для обработки формат, например 'group1: user1, user2, user3 ...' –