Implantação do Powershell com nant - problema com argumentos de script
-
09-12-2019 - |
Pergunta
Eu tenho um script do PowerShell atualizando minha solução:
Add-PSSnapin Microsoft.SharePoint.PowerShell
write-host $args[0]
Update-SPSolution -Identity PkbInfo.SP.wsp -literalpath $args[0] -GACDeployment
Quando eu o executo com o shell de gerenciamento do SP 2010 (sem Add-PSSnapin, é claro), ele funciona bem, mas quando tento executá-lo com o comando nant:
<target name="sp.update">
<exec failonerror="true" program="${powershell.exe}">
<arg value="-noprofile" />
<arg value="-nologo" />
<arg value="-noninteractive" />
<arg value="-command" />
<arg value="${ps.script.name} ${ps.copyto.folder}" />
</exec>
</target>
Eu recebo um erro:
[exec] Update-SPSolution : c:\shared\PkbInfo.wsp: The specified file was no
t found.
[exec] At C:\Users\me\Documents\production\sharepoint\nant_powershell
.ps1:5 char
[exec] :18
[exec] + Update-SPSolution <<<< -Identity PkbInfo.SP.wsp -literalpath $arg
s[0] -GACDe
[exec] ployment
[exec] + CategoryInfo : ReadError: (:) [Update-SPSolution], Fi
leNotFound
[exec] Exception
[exec] + FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdl
etUpdateSo
[exec] lution
[exec]
[exec] Update-SPSolution : Zgłoszono wyjątek typu 'Microsoft.SharePoint.Pow
erShell.SPC
[exec] mdlet+SkipCurrentRecordException'.
Parece que o argumento que estou passando não foi analisado, o que é estranho, porque Write-Host em ambos os casos (com shell de gerenciamento e nant) exibe o caminho correto.Alguma idéia de por que $args[0] em Update-SPSolution não é convertido em argumento real ao executar com nant?
Solução
Tente colocar um $() em torno do seu caminho literal, assim:
Update-SPSolution -Identity PkbInfo.SP.wsp -literalpath $($args[0]) -GACDeployment
Você também pode usar Resolve-Path se o seu caminho for relativo
Numa nota lateral:lembre-se disso Update-SPSolution apenas funciona desde que você atualize os artefatos existentes (por exemplo.nenhum módulo/recurso/arquivo root novo ou excluído)
Outras dicas
Você tenta executar:
Update-SPSolution -Identity PkbInfo.SP.wsp
E você recebe o erro:
[exec] Update-SPSolution : c:\shared\PkbInfo.wsp: The specified file was no
t found.
Verifique o nome do seu arquivo :)
(Eu sei que você pode ter identidade e nome de arquivo diferentes, mas ninguém muda isso, certo?)