Ich versuche, ein PowerShell-Skript aus einer C# -Anwendung auszuführen. Das Skript muss unter einem speziellen Benutzerkontext ausgeführt werden.Ausführen von PowerShell-Skript aus C# -Anwendung
Ich habe versucht, verschiedene Szenarien einige arbeiten einige nicht:
1. direkten Aufruf von Powershell
Ich habe das Skript direkt von einer ps-Konsole genannt, die unter dem richtigen laufen Benutzerberechtigungen.
C:\Scripts\GroupNewGroup.ps1 1
Ergebnis: Beende das Skript ausgeführt wird.
2. von einer C# Konsolenanwendung
ich das Skript von einem C# Consoleapplication genannt habe, die unter dem richtigen UserCredentials gestartet wird.
Code:
string cmdArg = "C:\\Scripts\\GroupNewGroup.ps1 1"
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.ApartmentState = System.Threading.ApartmentState.STA;
runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(cmdArg);
pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
Collection<PSObject> results = pipeline.Invoke();
var error = pipeline.Error.ReadToEnd();
runspace.Close();
if (error.Count >= 1)
{
string errors = "";
foreach (var Error in error)
{
errors = errors + " " + Error.ToString();
}
}
Ergebnis: Kein Erfolg. Und viele "Null-Array" -Ausnahmen.
3. von C# Konsolenanwendung - Code auf dieser Seite Identitätswechsel
(http://platinumdogs.me/2008/10/30/net-c-impersonation-with-network-credentials)
Ich habe das Skript von C# Consoleapplication genannt, die unter den richtigen UserCredentials gestartet wird und der Code enthält Identitätswechsel .
Code:
using (new Impersonator("Administrator2", "domain", "testPW"))
{
using (RunspaceInvoke invoker = new RunspaceInvoke())
{
invoker.Invoke("Set-ExecutionPolicy Unrestricted");
}
string cmdArg = "C:\\Scripts\\GroupNewGroup.ps1 1";
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.ApartmentState = System.Threading.ApartmentState.STA;
runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(cmdArg);
pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
Collection<PSObject> results = pipeline.Invoke();
var error = pipeline.Error.ReadToEnd();
runspace.Close();
if (error.Count >= 1)
{
string errors = "";
foreach (var Error in error)
{
errors = errors + " " + Error.ToString();
}
}
}
Ergebnisse:
- Der Begriff 'Get-Contact' wird nicht als Name eines Cmdlets erkannt, Funktion, Skriptdatei oder ein geschriebenes Programm. Überprüfen Sie die Schreibweise des Namens oder, wenn ein Pfad enthalten war, überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut mit .
- Der Begriff 'C: \ Scripts \ FunctionsObjects.ps1' wird nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder wenn ein Pfad enthalten war, überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut.
- keine Snap-In ist für Windows Powershell Version 2. Microsoft.Office.Server, Version = 14.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c
- System.DirectoryServices.AccountManagement, Version = 4.0 registriert. 0,0, Culture = neutral, PublicKeyToken = b77a5c561934e089
- Ausnahme calling ".ctor" mit "1" Argument (e):. „die Web-Anwendung bei
http://XXXX/websites/Test4/
konnte nicht gefunden werden Stellen Sie sicher, dass Sie die URL korrekt eingegeben haben.Wenn die URL Inhalt bestehende dienen sollte, kann der Systemadministrator brauchen eine neue URL Zuordnung der beabsichtigten Anwendung hinzuzufügen.“ - Sie keine Methode auf einem Null-wertigen Ausdruck aufrufen können. Kann nicht Index in eine null Array.
bis jetzt gibt es keine Arbeits Antwort
weiß jemand, warum es Unterschiede und wie das Problem zu lösen?
eine endgültige Lösung mit vollständigem Source Code zu arbeiten? – Kiquenet
Vermeiden Sie den Aufruf von [RunSpace.Open() bei der Identitätsübernahme] (http://StackOverflow.com/a/22749094/939250). –