Necesito ejecutar un script de PowerShell desde C #. El script necesita argumentos de línea de comandos.
Esto es lo que he hecho hasta ahora:
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(scriptFile);
// Execute PowerShell script
results = pipeline.Invoke();
scriptFile contiene algo como "C: \ Archivos de programa \ MyProgram \ Whatever.ps1".
El script usa un argumento de línea de comando como "-key Value" mientras que Value puede ser algo así como una ruta que también puede contener espacios.
No consigo que esto funcione. ¿Alguien sabe cómo pasar argumentos de línea de comando a un script de PowerShell desde C # y asegurarse de que los espacios no sean un problema?
c#
command-line
powershell
scripting
arguments
Mephisztoe
fuente
fuente
Command myCommand = new Command(scriptfile);
y luegopipeline.Commands.Add(myCommand);
resuelva el problema de escape.Respuestas:
Intente crear scriptfile como un comando separado:
entonces puedes agregar parámetros con
y finalmente
Aquí está el código completo y editado:
fuente
Tengo otra solucion Solo quiero probar si la ejecución de un script de PowerShell tiene éxito, porque quizás alguien podría cambiar la política. Como argumento, solo especifico la ruta del script a ejecutar.
Siendo el contenido del guión:
fuente
Tuve problemas para pasar parámetros al método Commands.AddScript.
Resolví esto pasando
null
como el nombre y el parámetro como valor en una colección deCommandParameters
Aquí está mi función:
fuente
using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))...using (Pipeline pipeline = runspace.CreatePipeline())
También puede usar la canalización con el método AddScript:
Tomará una cadena y cualquier parámetro que le pase.
fuente
El mío es un poco más pequeño y simple:
fuente
Aquí hay una forma de agregar parámetros al script si usó
Esto es con el uso de un HashMap como parámetros, la clave es el nombre de la variable en el script y el valor es el valor de la variable.
Y el método de variable de relleno es:
de esta manera puede agregar fácilmente múltiples parámetros a un script. También he notado que si desea obtener un valor de una variable en su secuencia de comandos así:
// resulta el nombre de la v
tendrá que hacerlo de la forma que le mostré porque, por alguna razón, si lo hace de la forma en que Kosi2801 sugiere que la lista de variables de script no se llena con sus propias variables.
fuente
Para mí, la forma más flexible de ejecutar el script de PowerShell desde C # era usar
PowerShell.Create().AddScript()
El fragmento del código es
Puede comprobar si hay algún error marcando Streams.Error. Fue muy útil comprobar la colección. Usuario es el tipo de objeto que devuelve el script de PowerShell.
fuente