Question:
I’m attempting to run a powershell script from C#. I have no problem passing strings to the script however when I try to pass an array to the powershell script an exception gets thrown.
Here is the C# code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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 |
Here is the powershell script:
1 2 3 |
param([string[]] $reponseCollection) $a = $responseCollection[0] |
Every time this code executes it throws:
1 2 |
Cannot index into a null array. |
I know that the code to execute the powershell script is correct when passing strings to the powershell script, it has been thoroughly tested.
Answer:
It works perfectly fine for me.
Only thing I notice is that, in your script params you have $reponseCollection
– the s is missing in response. Unless you made a mistake in entering it here, that would be the reason.
It might have seemed to work with string because Powershell doesn’t care ( normally) when you assign / use a non-existing variable. But when you index into a null / non-existing variable, it does throw the error.