2014-04-30 131 views
0

我有一個Sharepoint庫,我有一個Powershell腳本將文件放入進行處理。 Powershell腳本與Active Directory聯繫並返回組成員身份信息。然後,腳本使用組所有者的名稱爲我的庫中的組所有者(如果它不存在)創建一個文件夾,並將包含在特定組中的所有用戶的.CSV刪除到該文件夾​​中。使用Powershell在Sharepoint庫中授予文件夾權限?

這裏需要的是授予只讀組的所有者的'讀'權限,這將是我們正在工作的文件夾的名稱。理想情況下,文件夾將被隱藏,但我知道有限制在使用Sharepoint時。

例如:

李四,用戶:JDOE將能夠訪問Z:/jdoe/IT.csv但不 Z:/someuser/HR.csv

我讓我的Sharepoint Library映射到Z:/目前,讓我的生活更輕鬆。

我執行了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!" 

     } 

    } 

而在這裏,是個錯誤與我的代碼相關聯:

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

+0

[此鏈接](http://social.msdn.microsoft.com/Forums/sharepoint/en- US/31fcaf17-6f7d-43ae-b3f2-bc5694493d1b/set-permission-to-document-library-folder-using-powershell?forum = sharepointdevelopmentprevious)強調了一種快速的方式來完成類似於我所要求的操作,但是使用命令'RoleDefinitionBindings.Add',我不確定適用於我的場景。任何見解? – MrS1ck

+1

提供的鏈接提出瞭如何授予文件夾權限的正確解決方案。你嘗試過嗎?你有任何錯誤? –

+0

@ Yevgeniy.Chernobrivets我已經更新了我的問題,並提供了從提供的鏈接中修改的代碼,以及隨附的錯誤。 – MrS1ck

回答

0

我最終意識到,如果我使用PowerShell來獲取信息到.CSV,然後最終轉到Sharepoint,實際上浪費時間與文件並沒有任何意義,並通過Powershell直接進入Sharepoint。

下面是我用了完成這一任務的代碼:http://pastebin.com/xRyvXLCB

特別感謝@TheMadTechnician

+2

乾乾淨淨的腳本,很高興看到一切順利,並感謝您爲未來用戶發佈最終解決方案。 – TheMadTechnician