Ho scritto uno script che inserisce alcuni dati di test in una libreria di documenti. Intendo utilizzarlo come passaggio successivo alla distribuzione in Visual Studio 2010, in modo che la libreria non sia vuota dopo una ritrazione & distribuita.Lo script di SharePoint non riesce quando viene eseguito come comando post-distribuzione di Visual Studio
Le porzioni rilevanti dello script sono:
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);
...
}
Funziona bene quando viene eseguito come segue da la riga di comando, anche immediatamente dopo una distribuzione di Visual Studio:
powershell \source\ProjectFiles\TestData\Install.ps1
Tuttavia, non funziona quando uso lo stesso comando esattamente come una riga di comando post-distribuzione nelle proprietà del progetto di SharePoint in 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
È interessante notare che, posso riprodurre l'errore sulla riga di comando se corro:
c:\windows\Syswow64\WindowsPowerShell\v1.0\powershell \source\ProjectFiles\TestData\Install.ps1
Tuttavia, il comando post-distribuzione non riesce, anche se corro esplicitamente \windows\System32\WindowsPowerShell\v1.0\powershell
e \windows\Syswow64\WindowsPowerShell\v1.0\powershell
.
Aggiornamento: Soluzione trovato
mi sembra di avere un problema simile a quello discusso qui:
Non è possibile accedere un'API SharePoint a 64 bit utilizzando 32 bit clienti. Poiché Visual Studio è a 32 bit, l'azione successiva alla distribuzione verrà eseguita in un processo a 32 bit e avrà esito negativo. C'è, tuttavia, un MSBuild a 64 bit. Se gli permettiamo di eseguire lo script di PowerShell, tutto andrà bene.
Avvolgere lo script in un MSBuild file come ad esempio questo:
<?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>
Quindi, impostare la riga di comando post-distribuzione a:
%WinDir%\Microsoft.NET\Framework64\v4.0.30319\MSBuild $(SolutionDir)\ProjectFiles\TestData\Install.msbuild
Grazie. Quindi sto cercando di eseguire: "powershell Invoke-Command -ConfigurationName Microsoft.PowerShell -ComputerName LOCALHOST -FilePath C: \ source \ ProjectFiles \ TestData \ Install.ps1". Sfortunatamente, questo fa fallire il mio script sulla prima riga, dove sto includendo l'altro file ps1: Non posso associare l'argomento al parametro 'Path' perché è null. Apparentemente, $ script: MyInvocation non funziona quando si utilizza Invoke-Command. –