【问题标题】:Grant permissions to folder in Sharepoint library using Powershell?使用 Powershell 授予对 Sharepoint 库中文件夹的权限?
【发布时间】:2014-04-30 17:11:21
【问题描述】:

我有一个 Sharepoint 库,我有一个 Powershell 脚本将文件放入其中进行处理。 Powershell 脚本到达 Active Directory,并返回组成员信息。然后,该脚本使用组所有者的名称在我的库中为组所有者(如果不存在)创建一个文件夹,并将特定组中包含的所有用户的 .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 脚本“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!"

        }

   }

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

完整代码可以在这里找到: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   

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

【问题讨论】:

  • 提供的链接为如何授予文件夹权限提出了正确的解决方案。你试过吗?你有任何错误吗?
  • 1) 您收到此错误是因为您的 $web 变量是在您尝试访问用户集合后声明的。将“$web = Get-SPWeb -identity $WebURL”放在函数的开头。 2)您需要为 BreakRoleInheritance 方法提供布尔值而不是字符串。将 "$folder.BreakRoleInheritance("true")" 替换为 $folder.BreakRoleInheritance($true) 3) 我建议使用 EnsureUser 方法按名称获取用户,而不是直接查找 SiteUsers 集合。[Microsoft.SharePoint.SPUser]$ spuser=$web.EnsureUser($strOwnerName)
  • 您的 GrantUserpermission 函数和脚本范围有重叠 - $strOwnerName。删除 GrantUserpermission 函数的参数。授予用户权限()
  • 我没有在您的代码中看到您初始化 $folder 变量。错误所说的 - $folder 变量未初始化。
  • 执行$Target = $Web.Folders | ?{$_.Name -eq $strOwnerName},然后将$Folder.BreakRole$Folder.RoleAssign 行更改为$Target.BreakRole$Target.RoleAssign 以修复对象类型引用错误。

标签: security powershell sharepoint csv sharepoint-2010


【解决方案1】:

我最终意识到,如果我使用 Powershell 将信息获取到 .CSV,然后最终到 Sharepoint,那么实际上浪费时间处理文件并通过 Powershell 直接访问 Sharepoint 是没有意义的。

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

特别感谢@TheMadTechnician

【讨论】:

  • 漂亮干净的脚本,很高兴看到一切顺利,感谢您为未来的用户发布最终解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
相关资源
最近更新 更多