He escrito un guión que introduce algunos datos de prueba en una biblioteca de documentos. Tengo la intención de utilizarlo como un paso posterior a la implementación en Visual Studio 2010, para que la biblioteca no esté vacía después de una retractación & implementar.SharePoint guión falla cuando se ejecuta como un comando posterior a la implementación de Visual Studio
Las partes pertinentes de la secuencia de comandos son:
Install.ps1:
$scriptDirectory = Split-Path -Path $script:MyInvocation.MyCommand.Path -Parent
. "$scriptDirectory\Include.ps1"
$webUrl = "http://localhost/the_site_name"
$web = Get-SPWeb($webUrl)
...
Include.ps1:
function global:Get-SPSite($url)
{
return new-Object Microsoft.SharePoint.SPSite($url)
}
function global:Get-SPWeb($url,$site)
{
if($site -ne $null -and $url -ne $null){"Url OR Site can be given"; return}
#if SPSite is not given, we have to get it...
if($site -eq $null){
$site = Get-SPSite($url);
...
}
Funciona bien cuando se ejecuta como se desprende de la línea de comandos, incluso inmediatamente después de volver a implementar Visual Studio:
powershell \source\ProjectFiles\TestData\Install.ps1
Sin embargo, no funciona cuando se utiliza el mismo comando exactamente como una línea de comandos posterior a la implementación en las propiedades del proyecto de SharePoint en Visual Studio:
Run Post-Deployment Command: New-Object : Exception calling ".ctor" with "1" argument(s): "The Web applicati on at http://localhost/the_site_name could not be found. Verify that you have t yped the URL correctly. If the URL should be serving existing content, the syst em administrator may need to add a new request URL mapping to the intended appl ication." At C:\source\ProjectFiles\TestData\Include.ps1:15 char:18 + return new-Object <<<< Microsoft.SharePoint.SPSite($url) + CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvoca tionException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power Shell.Commands.NewObjectCommand
Curiosamente, puedo reproducir el error en la línea de comandos si funciono:
c:\windows\Syswow64\WindowsPowerShell\v1.0\powershell \source\ProjectFiles\TestData\Install.ps1
Sin embargo, el comando pos-implementación falla incluso si me quedo explícitamente \windows\System32\WindowsPowerShell\v1.0\powershell
y \windows\Syswow64\WindowsPowerShell\v1.0\powershell
.
Actualización: Solución encontró
Me parece estar teniendo un problema similar al discutido aquí:
No puedo acceder a una API de SharePoint de 64 bits con 32 bits clientela. Dado que Visual Studio es de 32 bits, la acción posterior a la implementación se ejecuta en un proceso de 32 bits y se producirá un error. Sin embargo, hay un MSBuild de 64 bits. Si permitimos que ejecute el script de PowerShell, todo está bien.
Wrap la secuencia de comandos en un MSBuild de archivo como este:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Install" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Install">
<Exec Command="powershell .\Install" />
</Target>
</Project>
A continuación, establezca la línea de comandos posterior a la implementación de:
%WinDir%\Microsoft.NET\Framework64\v4.0.30319\MSBuild $(SolutionDir)\ProjectFiles\TestData\Install.msbuild
Gracias. Así que estoy tratando de correr: "PowerShell Invoke-Command -ConfigurationName Microsoft.PowerShell -ComputerName LOCALHOST -FilePath C: \ source \ ProjectFiles \ TestData \ Install.ps1". Desafortunadamente, esto hace que mi secuencia de comandos falle en la primera línea, donde estoy incluyendo el otro archivo ps1: No se puede vincular el argumento al parámetro 'Ruta' porque es nulo. Aparentemente, $ script: MyInvocation no funciona cuando se usa Invoke-Command. –