Obtener un error de creación al usar PowerShell
-
22-10-2019 - |
Pregunta
Estoy recibiendo este error en la siguiente línea
Excepción llamar a "crear" con el argumento (s) "4": "El valor no puede ser nulo. Nombre del parámetro: ParentFolder" en X: dev PowerShell MoveFiles2Docset.ps1: 29 Char: 91 + $ newDocumentset = [Microsoft.Office. DocumentManagement.documentumentets.documentset] :: create <<<< ($ dclib.rootfo lder, $ docset, $ ctype.id, $ docsetproperties) + categoryInfo: nopecificado: (:) [], metodInVocationException + totalmente según lo cualificadoerid: dotnetmethodexception
$newDocumentSet = [Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet]::Create($docLib.RootFolder,$DocSet,$cType.Id,$docsetProperties)
$siteURL="http://intranet.colgate.com/sites/blazingWhite"
$docLib = "NewProduct"
$site=Get-SPSite $siteURL
$web=$site.RootWeb
$collFiles=$web.GetFolder($docLib).Files
$count=$collFiles.Count
while($count -ne 0)
{
$item = $collFiles[$count-1].Item
## Create document set if it does not exists
$DocSet = $item["CounterParty"]
$DocSetURL = $siteURL + "/" + $docLib + "/" + $DocSet
$docLibURL = $siteURL + "/" + $docLib
[Microsoft.SharePoint.SPFolder]$targetFolder = $web.GetFolder($DocSetURL)
[Microsoft.SharePoint.SPFolder]$doclibFolder = $web.GetFolder($docLibURL)
Write-Host ""
Write-Host $DocSet
Write-Host $targetFolder
Write-Host $doclibFolder
if (-not $targetFolder.Exists)
{ # Create Doc Set
# Get Document Set Content Type from list
$cType = $web.ContentTypes["Document Set"]
# Create Document Set Properties Hashtable
[Hashtable]$docsetProperties = @{"Title"=$DocSet}
$docsetProperties = @{"Description"=$DocSet}
$docsetProperties = @{"CounterParty"=$DocSet}
Write-Host $cType.Id
Write-Host $docsetProperties
Write-Host ""
# Create new Document Set
$newDocumentSet = [Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet]::Create($doclibFolder,$DocSet,$cType.Id,$docsetProperties)
Write-Host "Document set created " $newDocumentSet
if($newDocumentSet.Exists)
{
# changing folder type to Document Set type
$newDocumentSet.Item["ContentTypeId"] = $cType.Id
$newDocumentSet.Item["HTML File Type"] = "SharePoint.DocumentSet"
$newDocumentSet.Item.Update()
}
}
# move file(s) to the document set
Write-Host "$DocSet is the doc set. $collFiles[$count-1].Name is name"
$collFiles[$count-1].MoveTo($siteURL + "/" + $docLib + "/" + $DocSet + "/" + $collFiles[$count-1].Name, $true)
$count--
}
#dispose:
$web.Dispose();
$site.Dispose();
Editar:
El código anterior está funcionando, excepto que el conjunto de documentos se parece a la carpeta en lugar del icono de conjunto de Doc Blue. ¿Alguien puede arrojar algo de luz sobre esto por favor?
Solución
Solo mirando tu código.
Create($docLib.RootFolder,$DocSet,$cType.Id,$docsetProperties)
y $docLib
¿Es la cadena?
$docLib = "NewProduct"
tal vez esto funcionaría
Create($targetFolder,$DocSet,$cType.Id,$docsetProperties)
ya que
[Microsoft.SharePoint.SPFolder]$targetFolder = $web.GetFolder($DocSetURL)
Otros consejos
Llego un poco tarde a esta fiesta en particular, pero mientras investigaba mi propio problema con los conjuntos de documentos que aparecen como carpetas simples, me encontré con esta entrada de blog ( http://aknauer.blogspot.com/2011/06/document-sets-und-powershell.html ) que contenía esta valiosa pepita:
"También es importante que seleccione el Contenido tipo $ CTYPE de la colección de la lista y no de la colección de la web. De lo contrario, en lugar de que solo se cree una nueva carpeta".
Cambié mi asignación de tipo de contenido de la colección web (como lo había hecho Mala) a la colección de listas (como sugiere Andreas) y mi problema se resolvió.