2011-12-01 26 views
5

Sto tentando di eseguire uno script PowerShell da C#. Non ho problemi a passare le stringhe allo script, tuttavia quando provo a passare un array allo script PowerShell viene lanciata un'eccezione. ecco il codice C#:C# che passa una matrice a uno script PowerShell

string [] test = {"1","2","3","4"}; 

RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); 
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); 

runspace.ApartmentState = System.Threading.ApartmentState.STA; 
runspace.ThreadOptions = PSThreadOptions.UseCurrentThread; 

runspace.Open(); 
RunspaceInvoke invoker = new RunspaceInvoke(); 
invoker.Invoke("Set-ExecutionPolicy Unrestricted"); 

Pipeline pipeline = runspace.CreatePipeline(); 
Command myCmd = new Command(@"C:\test.ps1"); 
CommandParameter param = new CommandParameter("responseCollection", test); 
myCmd.Parameters.Add(param); 
pipeline.Commands.Add(myCmd); 

// Execute PowerShell script 
Collection<PSObject> results = pipeline.Invoke(); 

Ecco lo script PowerShell:

param([string[]] $reponseCollection) 
$a = $responseCollection[0] 

Ogni volta che questo codice viene eseguito getta:

Cannot index into a null array. 

So che il codice per eseguire il Lo script di powershell è corretto quando si passano le stringhe allo script di PowerShell, è stato accuratamente testato.

risposta

5

Funziona perfettamente bene per me.

L'unica cosa che noto è che, nei tuoi parametri di script hai $reponseCollection - la risposta è mancante. A meno che tu non abbia commesso un errore inserendolo qui, questa sarebbe la ragione.

Potrebbe sembrare che funzioni con la stringa perché a Powershell non interessa (normalmente) quando si assegna/utilizza una variabile non esistente. Ma quando si indice in una variabile nulla/non esistente, viene generato l'errore.

+0

Non riesco a credere che questo fosse il problema. Mi ci sono volute ore per restringere semplicemente il problema. – firthh

-2

Penso che è necessario passare la matrice per PowerShell come stringa nel formato di array PowerShell, vale a dire,

string test = "('1','2','3','4')"; 
+0

Nope :(Stesso errore – firthh

Problemi correlati