- Aufruf powershell-Skript in der post-gebaut mit Parametern
Ich versuche, Powershell, um mein PS-script in post gebaut - aber irgendwie klappt es nicht so wie es soll:
Folgenden Befehl in den Post-Build:
C:\WINDOWS\system32\windowspowershell\1.0\powershell.exe
-Command "& $(MSBuildProjectDirectory)\CreateSite.ps1 'auto'"
(eingefügte Zeilenumbruch zur besseren Lesbarkeit)
Den Befehl führt den powershell-Skript erfolgreich, aber was Sie nicht tun können ist, führen Sie die Befehle in (Ausgabe von Erstellen):
Rund Post-Build-Befehl:
Add-PSSnapin : No snap-ins have been registered for Windows PowerShell version 2
At C:\path\CreateSite.ps1:4 char:
38
+ Add-PsSnapin <<<< Microsoft.SharePoint.PowerShell}
+ CategoryInfo : InvalidArgument: (Microsoft.SharePoint.PowerShell:String) [Add-PSSnapin], PSArgumentException
+ FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand
Anschluss zu viele Fehler, da alle folgenden Befehle müssen Sie die Sharepoint-Snap-In.
- Beim ausführen von powershell C:\path\CreateSite.ps1 auto von cmd - alles funktioniert.
- Beim öffnen powershell.exe und läuft C:\path\CreateSite.ps1 auto - alles funktioniert.
- Beim Rechtsklick CreateSite.ps1 --> ausführen mit powershell - alles funktioniert.
Die entsprechende Zeile in dem Skript ist einfach Add-PsSnapin Microsoft.SharePoint.PowerShell
.
Wie kann ich laufen, nur das verdammte Skript (und auch das PSSnapIn übergeben) übergibt einen parameter in Visual Studio " post-build?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufgrund von Dateisystem-Virtualisierung, kann man nicht wirklich geben Sie den Pfad zur 64-bit-version von PowerShell aus einer 32-bit-Prozess (also Visual Studio - die Gastgeber das msbuild-Modul). Ein hack-ish Weg, dies zu umgehen, ist das erstellen eines 64-bit-launcher, läuft als 64-bit-Version und starten Sie die 64-bit-version von PowerShell. Hier ist ein einfaches C# - Programm, dass dies tun wird:
Werden Sie sicher zum kompilieren dieser als 64-bit-wie so:
Dann, aus Ihrem post-build-Ereignis ausführen dieser launcher exe übergeben Sie die Parameter, die Sie aufrufen möchten, 64-bit-PowerShell mit. Auch mit PowerShell 2.0 würde ich empfehlen, mit der
File
parameter, um ein Skript auszuführen, z.B.:Sagte, sicher muss es eine andere Möglichkeit (nutzen), startet die EXE-Dateien von einer 64-bit-Prozess.
(Dieser thread ist nicht neu, aber ich habe hier von Google, so dass ich dachte, das teilen der Lösung, die ich gefunden, wäre interessant, andere)
Habe ich versucht den Pfad zu ändern powershell.exe zu "%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe" und es funktionierte perfekt. Die 64-bit-version wird aufgerufen, aus dem Post-Build Ereignis-und erfolgreich, fügt der SharePoint-Snap-in.
Credits zu diesem Artikel: http://msdn.microsoft.com/en-us/library/ff798298.aspx, "Verwenden von Windows PowerShell-Skripts zur Automatisierung von Aufgaben in Visual Studio".
Wenn Sie führen Sie ein Skript direkt, verwenden Sie vermutlich 32bit PowerShell und in Ihre msbuild-Skript 64bit oder Umgekehrt. Auch haben Sie einen Blick auf Error-msg: "Nein-snap-ins registriert wurden, für die Windows PowerShell-version 2.".
C:\windows\system32` is remapped to
C:\Windows\SysWow64`.Einer etwas besseren Variante des Ausgabe-Umleitung:
Anruf mit
sh64 powershell -File ./buildscripts/deploy.ps1 -Ex RemoteSigned
hinzufügen cmd-Datei (z.B. run-Skript.cmd) mit diesem Inhalt:
und rufen Sie es von build-event in einer solchen Art und Weise: