2016-08-06 5 views
0

ich ein Automatisierungs Problem, das ich habe auf die folgende Situation aufgespürt:Add-PSSnapin ‚Microsoft.SharePoint.PowerShell‘ läuft in ISE aber nicht von Net Process.Start Befehl

Der PS-Skript sein geladen über process.start in einem C# -Programm. Wenn ich das Skript in der ISE ausführe, läuft es gut. Wenn über Process.Start ausgeführt wird, schlägt es auf den Befehl:

Add-PSSnapin 'Microsoft.SharePoint.PowerShell' 

Mit dem Fehler:

Add-PSSnapin : No snap-ins have been registered for Windows PowerShell version 4. 

Der Befehl, den ich für Process.Start in .net verwendet habe, ist:

var Arguments @"-version 4.0 -ExecutionPolicy Bypass -noexit -file """ + filePath + @""" -XmlString """ + args + @""" -Verb RunAs" 
var FileName = "powershell.exe" 

var process = Process.Start(FileName, Arguments); 

filePath ist der Pfad zum Powershell-Skript, das ausgeführt wird.

Dies wird ausgeführt und versucht, das Skript auszuführen, scheitert jedoch an dem oben im Skript angezeigten Befehl. Das Benutzerkonto ist das Administrator-Dienstkonto für den Computer. Das Problem scheint darin zu liegen, wie das .NET-Programm PowerShell startet, da ich dieses Skript und diese Befehle über die ISE und die Konsole ausführen kann, wenn ich es manuell (unter demselben Dienstkonto) mache. Ich finde einfach keine Kombination von Tricks, um das .Net-Programm in die Lage zu versetzen, das PowerShell-Skript unter dem korrekten Profil auszuführen, denke ich.

Irgendwelche Gedanken?

+0

Fügen Sie dies Ihrem Skript hinzu und vergleichen Sie die Ergebnisse: '[Environment] :: Is64BitProcess'. – PetSerAl

+0

Interessant ... es ist True in ISE und wenn ich eine Konsole manuell ausführen, aber False bei Ausführung über das .Net-Programm. – Rocky

+0

Habe es funktioniert, musste nur das .Net-Programm für x64 kompilieren. Danke für die Richtung! – Rocky

Antwort

0

Die Anfrage von PetSerAl war genau richtig ... Beim Ausführen des PowerShell-Skripts über das .Net-Programm lief es unter x86, aber wenn es über ISE ausgeführt wurde, lief es in x64. Ich habe das .Net-Programm gegen x64 neu kompiliert und alles funktioniert jetzt.

Danke für den Hinweis!

Verwandte Themen