【问题标题】:SharePoint Online Powershell Folder creationSharePoint Online Powershell 文件夹创建
【发布时间】:2017-11-04 00:42:50
【问题描述】:

我需要能够将 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

【问题讨论】:

  • 你检查我的答案了吗?

标签: powershell sharepoint sharepoint-online


【解决方案1】:

假设您将在 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)

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2018-12-17
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多