SharePoint Online Powershell文件夹创建

时间:2017-06-02 14:48:22

标签: powershell sharepoint sharepoint-online

我需要能够将文件夹创建从csv编写到SharePoint Online文档库中,其中每个文件夹都禁用了权限继承,并且每个文件夹都要添加到每个文件夹中。

以下代码可以创建文件夹并禁用继承,但似乎尝试添加组而不是用户。如何让它改为添加用户?

感谢。

### Get the user credentials
$credential = Get-Credential
$username = $credential.UserName
$password = $credential.GetNetworkCredential().Password
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force

### Input Parameters
$url = 'URL HERE'
$csvfilepath='C:\Scripts\data.csv'
$libname ='BUS61'

### References
# Specified the paths where the dll's are located.
Add-Type -Path 'C:\Scripts\SPOCmdlets\Microsoft.SharePoint.Client.dll'
Add-Type -Path 'C:\Scripts\SPOCmdlets\Microsoft.SharePoint.Client.Runtime.dll'


### CreateFolder with Permissions Function
function CreateFolderWithPermissions()
{

    # Connect to SharePoint Online and get ClientContext object.
    $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url)
    $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword)
    $clientContext.Credentials = $credentials

    Function GetRole
    {
        [CmdletBinding()]
        param
        (
            [Parameter(Mandatory = $true, Position = 1)]
            [Microsoft.SharePoint.Client.RoleType]$rType
        )

        $web = $clientContext.Web
        if ($web -ne $null)
        {
            $roleDefs = $web.RoleDefinitions
            $clientContext.Load($roleDefs)
            $clientContext.ExecuteQuery()
            $roleDef = $roleDefs | Where-Object { $_.RoleTypeKind -eq $rType }
            return $roleDef
        }
        return $null
    }

    # Get the SharePoint web
    $web = $clientContext.Web;
    $clientContext.Load($web)

    #Get the groups
    $groups = $web.SiteGroups
    $clientContext.Load($groups)
    $clientContext.ExecuteQuery()


    #Read CSV File and iterate
    $csv = Import-CSV $csvfilepath
    foreach ($row in $csv)
    {
        #Create Folder
        $folder = $web.Folders.Add($libname + "/" + $row.Folder)
        $clientContext.Load($folder)
        $clientContext.ExecuteQuery()

        #Assign Role
        $group = $groups.GetByName($row.Group)
        $clientContext.Load($group)
        $clientContext.ExecuteQuery()

        $roleType= $row.Role
        $roleTypeObject = [Microsoft.SharePoint.Client.RoleType]$roleType
        $roleObj = GetRole $roleTypeObject
        $usrRDBC = $null
        $usrRDBC = New-Object Microsoft.SharePoint.Client.RoleDefinitionBindingCollection($clientContext)
        $usrRDBC.Add($roleObj)

        # Remove inherited permissions
        $folder.ListItemAllFields.BreakRoleInheritance($false, $true)
        $clientContext.Load($folder.ListItemAllFields.RoleAssignments.Add($group, $usrRDBC))
        $folder.Update()
        $clientContext.ExecuteQuery()           

        # Display the folder name and permission
        Write-Host -ForegroundColor Blue 'Folder Name: ' $folder.Name ' Group: '$row.Group ' Role: ' $roleType;

    }
}
#Execute the function
CreateFolderWithPermissions

1 个答案:

答案 0 :(得分:0)

我们假设您将在CSv文件中定义用户登录。比你必须改变线:

$group = $groups.GetByName($row.Group)

$user = $web.EnsureUser($row.User)

并将所有对$group变量的引用替换为$user

搜索用户的更通用方法(例如显示名称)将使用Utility.ResolvePrincipal方法:

[Microsoft.SharePoint.Client.Utilities.Utility]::ResolvePrincipal($clientContext, $web, "DisplayName", ([Microsoft.SharePoint.Client.Utilities.PrincipalType]::User), ([Microsoft.SharePoint.Client.Utilities.PrincipalSource]::All), $null, $false)