Pregunta

Como no podemos guardar el sitio de SharePoint (con la función de publicación habilitada) como plantilla, estoy buscando una manera de hacer esto programáticamente:

Realice una copia de "Sitea" con un nuevo nombre "SiteB" bajo la misma Sitecollection

http: // spserver/colección/sitea

http: // spserver/colección/sitiob

¿Fue útil?

Solución

Creo que la forma más fácil es hacer una exportación seguida de una importación. Eso debería funcionar sin el problema duplicado de GUID. Los cmdlets de PowerShell son exportaciones y spweb de importación.

Programáticamente, hay equivalentes a estos en la API de migración de contenido (a veces conocida como "Prime"). Estos están en el Microsoft.sharepoint.playment Namespace. Usas el Spexport clase para exportar un paquete de migración de contenido y luego Espimpundia para hacer la importación.

Hay una descripción general de la migración de contenido en MSDN. No olvide que también puede usar la API de servicios web, como una alternativa programática al modelo de objeto.

Otros consejos

La solución de Rayn (ver comentarios de la publicación) me dio una idea para ejecutar PowerShell CMDLT de mi código usando:

System.Management.Automation

Collection<String> results = PowerShell.Create().AddScript(Ps).Invoke<String>();

Pero todavía tengo un problema:

Ejecutando este CMD "Get-Process": obtuve el resultado.

Ejecutando este cmd "importación de importación -identidad http: // spserver/cola/sitea -Path c: bkp file.cmp ":

The term 'Import-SPWeb' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Ejecutar el segundo CMD en la ventana PowerShell causa ningún problema y me importaron mi sitio.

Solución :

string BkpFile = @"C:\File.cmp";
string Url = "http://SPServer/CollA/SiteA";
string PsImport = "Import-SPWeb –Identity " + Url + " -Path " + BkpFile;
string PsPssnaping = "Add-PSSnapin Microsoft.SharePoint.PowerShell";

PowerShell ps = PowerShell.Create();

ps.AddScript(PsPssnaping);
ps.AddScript(PsImport);
ps.Invoke();

¿No hay posibilidad de duplicar un sitio de trabajo actual con otro nombre? La razón es que me gustaría hacer cambios en nuestro sitio de Prod y me gustaría probar los cambios en un sitio de prueba para el que necesitaría replicar nuestro sitio de Prod.

Gracias

Hay una razón por la que Microsoft ha restringido esto y no tienen claro al respecto, me enfrenté al mismo problema y descubrí que

-> Es un problema de caché de objetos, ya que utiliza los mismos GUIDS

Una solución para hacer una copia en la misma aplicación web es restaurar la colección de sitios en diferentes DB de contenido (como hacer el contenido actual DB fuera de línea, agregar un nuevo contenido db y restaurar), no lo he probado correctamente, pero creo que el caché de objeto los problemas estarán ahí.

Licenciado bajo: CC-BY-SA con atribución
scroll top