Question:
I have the following powershell script:
1 2 3 4 5 6 7 8 9 10 11 12 |
param( [Int32[]] $SomeInts = $null, [String]$User = "SomeUser", [String]$Password = "SomePassword" ) New-Object PSObject -Property @{ Integers = $SomeInts; Login = $User; Password = $Password; } | Format-List |
If I execute .\ParameterTest.ps1 (1..10)
I get the following:
1 2 3 4 |
Password : SomePassword Login : SomeUser Integers : {1, 2, 3, 4...} |
However, I don’t get the expected results if I run it in a separate powershell instance like this powershell -file .\ParameterTest.ps1 (1..10)
. In that case I get the following:
1 2 3 4 |
Password : 3 Login : 2 Integers : {1} |
My question is how can I pass the array, or other complex data type from a command line?
Answer:
The answer is to use powershell.exe -EncodedCommand
and to base64 encode the parameters. The description for this is on the PowerShell.exe Console Help technet page. I have compressed their version of the ceremony to do this into a one-liner:
1 2 |
powershell.exe -EncodedCommand "$([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('.\ParameterTest.ps1 (1..10)')))" |