Me gustaría pasar una matriz asociativa de C# a Powershell. A modo de ejemplo me gustaría ejecutar esta línea de PowerShell de código:Pasar una matriz asociativa de C# a Powershell
PS C:\> get-command | select name, @{N="Foo";E={"Bar"}} -first 3
Name Foo
---- ---
Add-Content Bar
Add-History Bar
Add-Member Bar
me gustaría hacer esto a través de un gasoducto de distintas comandos en lugar de un solo comando marcado como una secuencia de comandos. Aquí está el código:
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.Add("get-command");
Command c = new Command("select-object");
List properties = new List();
properties.Add("name");
properties.Add("@{N=\"Foo\";E={\"Bar\"}}");
c.Parameters.Add("Property", properties.ToArray());
c.Parameters.Add("First", 3);
pipeline.Commands.Add(c);
pipeline.Commands.Add("Out-String");
Collection retval = pipeline.Invoke();
runspace.Close();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in retval)
Console.WriteLine(obj.ToString());
Pero eso matriz asociativa que se pasa como un parámetro para seleccionar a objetos no se analiza correctamente. Esto es lo que sale del otro lado:
PS C:\test> c:\test\Bin\Debug\test.exe
Name @{N="Foo";E={"Bar"}}
---- --------------------
Add-Content
Add-History
Add-Member
¿Qué hay de malo en cómo estoy configurando los parámetros del comando Select-Object?
tipo de 'Mananagement', también "CS0117 de error: 'System.Management.Automation.ScriptBlock' no contiene una definición para 'Crear'" - aparte de eso, funciona muy bien – xcud
ah, debe usar v1 powershell (la creación estática está en v2). ¡lo siento! – x0n
Eso es lo que pensé. Solución aceptada de todos modos. Adapté lo que me proporcionó para obtener lo que necesitaba y lo apliqué a la aplicación real. Funciona genial. Mejor que nunca – xcud