Seiten

Donnerstag, 16. Juni 2011

Document Sets und PowerShell

Seit SharePoint 201ß erfreut sich jeder SharePoint Administrator über die PowerShell. Viele Verwaltungsaufgaben lassen sich nun durch Skripts automatisieren, aber auch einmalige Konfigurationen und Lösungen lassen sich einrichten. Sehr gerne verwende ich die PowerShell zur Dokumentenmigration aus dem Filesystem oder zur Neustrukturierung. An die Grenzen der vorhanden Cmdlets bin ich bei dem neuen Feature der Dokumentenmappen gestoßen - dafür gibt es nämlich keine! Das Erzeugen oder Ändern von Dokumentenmappen ist durch die mitgelieferten Cmdlets nicht möglich. Daher findet Ihr im folgenden Skript die Möglichkeit, Dokumentenmappen mit der PowerShell über das Objektmodel von SharePoint in der PowerShell anzulegen.

  1. ### Load SharePoint SnapIn   
  2. if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null)   
  3. {   
  4.     Add-PSSnapin Microsoft.SharePoint.PowerShell   
  5. }   
  6. ### Load SharePoint Object Model   
  7. [System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”)   
  8.   
  9. ### Get web and list   
  10. $web = Get-SPWeb http://myweb   
  11. $list = $web.Lists["List with Document Sets"]   
  12.   
  13. ### Get Document Set Content Type from list   
  14. $cType = $list.ContentTypes["Document Set Content Type Name"]   
  15.   
  16. ### Create Document Set Properties Hashtable   
  17. [Hashtable]$docsetProperties = @{"DocumentSetDescription"="A Document Set"}   
  18. $docsetProperties = @{"CustomColumn1"="Value 1"}   
  19. $docsetProperties = @{"CustomColum2"="Value2"}   
  20.     ### Add all your Columns for your Document Set   
  21.   
  22. ### Create new Document Set   
  23. $newDocumentSet = [Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet]::Create($list.RootFolder,"Document Set Title",$cType.Id,$docsetProperties)   
  24. $web.Dispose()  
Die Spaltenwerte der Dokumentenmappe werden durch die ab Zeile 16 erstellte Hashtable angelegt. Dabei werden die internen Spaltennamen angegeben. Wichtig ist auch, dass man den Inhaltstyp ( Content Type ) $cType aus der Sammlung der Liste auswählt und nicht aus der Sammlung des Webs. Ansonsten wird anstatt einer Dokumentenmappe nur ein neuer Ordner erstellt.
Als weite Methoden unter [Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet] steht noch folgendes zur Verfügung:
Document Set Methoden

Mehr Details zu den Methoden findet man auch in der MSDN hier . Mit diesem Handwerkszeug sollte nichts mehr zwischen der PowerShell und Dokumentenmappen stehen!

Good Luck,

Andreas

2 Kommentare:

patricksender hat gesagt…

nice post!

Ponnuki hat gesagt…

Thanks, your post is really helpful but I got an error message while I'm creating a document sets in line 23 of your code.

The command is shown below.
$newDocumentSet = [Microsoft.Office.DocumentManagement.DocumentSets.Docu
mentSet]::Create($list.RootFolder,$docsetName,$cType.Id,$docsetProperties)

The error code is shown below.

Exception calling "Create" with "4" argument(s): "0x80070005"
At line:1 char:89
+ $newDocumentSet = [Microsoft.Office.DocumentManagement.DocumentSets.DocumentS
et]::Create <<<< ($list.RootFolder,$docsetName,$cTypeSharedPractice.Id,$docsetP
roperties)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Do you have any suggestion? Thank you in advance.

Kommentar veröffentlichen