使用Powershell为Sharepoint库中的文件夹授予权限?

时间:2014-04-30 17:11:21

标签: security powershell sharepoint csv sharepoint-2010

我有一个Sharepoint库,我有一个Powershell脚本将文件放入处理中。 Powershell脚本可以访问Active Directory,并返回组成员身份信息。然后,该脚本使用群组所有者'在我的图书馆中为群组所有者创建一个文件夹(如果它不存在)。 name,并将特定组中包含的所有用户的.CSV删除到该文件夹​​中。

这里需要的是授予“阅读”权限。权限仅限于组的所有者,这将是我们正在使用的文件夹的名称。理想情况下,该文件夹将被隐藏,但我了解使用Sharepoint时存在一些限制。

例如:

  

John Doe,用户:jdoe可以访问Z:/jdoe/IT.csv但不能   Z:/someuser/HR.csv

我将我的Sharepoint资源库映射到Z:/目前,让我的生活更容易为Powershell。

我执行了get-command Module Microsoft.SharePoint.PowerShell | ft name并浏览了Sharepoint命令列表。

然后我偶然发现了Grant-SPObjectSecurity Cmdlet,我认为这是我想要在Powershell端使用的,在创建文件夹时,只将Sharepoint权限应用于文件夹所在的用户为...创建。

从头到尾的过程是:Powershell Script' Get_Group_Members'执行,每行读取包含Active Directory组名称的文本文件。对于找到的每个组,脚本标识组的所有者,创建以所有者AD名称命名的文件夹,并将.CSV文件放在列出该组的所有成员的文件夹中。然后,我(现在无论如何)手动启动下一个脚本' Import_CSV'它将所有信息提取到不相关进程的Sharepoint列表中。

希望有助于了解正在发生的事情。我是否正确地假设我应该在Powershell方面处理这个问题,而不是Sharepoint方面?如果是的话,我是否会去在Grant -SPObjectSecurity

的正确方向

谢谢!

更新

按照我在下面的评论中提供的链接,这是我想出的:

function GrantUserpermission($strOwnerName)
    {
    [Microsoft.SharePoint.SPUserCollection]$spusers=[Microsoft.SharePoint.SPUserCollection]$web.SiteUsers
    [Microsoft.SharePoint.SPUser]$spuser=$spusers[$strOwnerName]

        "Strowner name: " + $strOwnerName

        # Get the SPWeb object and save it to a variable
        $web = Get-SPWeb -identity $WebURL
        if ($strOwnerName -ne $null)

        {
            $sproleass=new-object Microsoft.SharePoint.SPRoleAssignment([Microsoft.SharePoint.SPPrincipal]$spuser)
            $folder.BreakRoleInheritance("true")
            $sproleass.RoleDefinitionBindings.Add($web.RoleDefinitions["Contribute"])
            $folder.RoleAssignments.Add($sproleass);
            Write-Host "Permission provided for user ", $strOwnerName
        }

        else

        {

        Write-Host "User ""$userName"" was not found in this web!"

        }

   }

在这里,是与我的代码相关的错误:

enter image description here

可在此处找到完整代码:http://pastebin.com/iBpj6V1U

更新#2

#apply permissions to folder
    "Strowner name: " + $strOwnerName
    function GrantUserpermission($strOwnerName)
    {

    $web = Get-SPWeb -identity $WebURL
    [Microsoft.SharePoint.SPUser]$spuser=$web.EnsureUser($strOwnerName)
    "Strowner name in Function: " + $strOwnerName   

enter image description here

更新了代码#2:http://pastebin.com/DzP1hVce

1 个答案:

答案 0 :(得分:0)

我最终意识到,如果我使用Powershell将信息提供给.CSV,然后最终提供给Sharepoint,那么实际上浪费文件时间并通过直接点击进入Sharepoint是没有意义的的powershell。

以下是我用来完成此操作的代码:http://pastebin.com/xRyvXLCB

特别感谢@TheMadTechnician