Estoy intentando ejecutar un script de PowerShell desde una aplicación C#. La secuencia de comandos se debe ejecutar en un contexto de usuario especial.Ejecutar PowerShell-Script desde la aplicación C#
He intentado diferentes escenarios algunos están trabajando algunos no:
1. llamada directa desde PowerShell
me han llamado la secuencia de comandos directamente desde una consola PS-que se está ejecutando bajo la correcta credenciales de usuario.
C:\Scripts\GroupNewGroup.ps1 1
Resultado: funcionando con éxito la secuencia de comandos.
2. desde una aplicación de consola de C#
He llamado a la secuencia de comandos de un # ConsoleApplication C que se inicia bajo las UserCredentials correctas.
Código:
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();
}
}
Resultado: sin éxito. Y muchas excepciones de "Null-Array".
3. procedente del AC# aplicación de consola - lateral código de hacerse pasar por
(http://platinumdogs.me/2008/10/30/net-c-impersonation-with-network-credentials)
He llamado a la secuencia de comandos de AC# ConsoleApplication que se inició bajo los UserCredentials correctas y el código contiene suplantación .
Código:
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();
}
}
}
Resultados:
- El término 'Get-Contacto' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa ejecutable. Compruebe la ortografía del nombre , o si se incluyó una ruta, verifique que la ruta sea correcta y intente de nuevo.
- El término 'C: \ Scripts \ FunctionsObjects.ps1' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable. Compruebe la ortografía del nombre, o si se incluyó una ruta, verifique que la ruta sea correcta y vuelva a intentarlo.
- No hay complementos se han registrado para la versión de Windows PowerShell 2. Microsoft.Office.Server, versión = 14.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c
- System.DirectoryServices.AccountManagement, versión = 4.0. 0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089
- Excepción llamada ".ctor" con el argumento (s) "1": ". la aplicación web en
http://XXXX/websites/Test4/
no se puede conocer Compruebe que ha escrito la URL correctamente.Si la dirección URL da servicio existente contenido, el administrador del sistema puede que tenga que añadir una nueva solicitud de URL mapeo para la aplicación prevista." - No se puede llamar a un método en una expresión nula de valor. No se puede índice en una nula matriz.
hasta ahora no hay una respuesta de trabajo
¿alguien sabe por qué hay diferencias y la forma de resolver el problema?
cualquier solución final con el código fuente completo de trabajo? – Kiquenet
Evita llamar a [RunSpace.Open() mientras suplantas] (http://stackoverflow.com/a/22749094/939250). –