I have the following powershell script:
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:
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:
Password : 3
Login : 2
Integers : {1}
My que开发者_开发知识库stion is how can I pass the array, or other complex data type from a command line?
The individual elements of the array (1..10
) are being passed as parameters to the script.
An alternative would be to do:
powershell -command {.\test.ps1 (1..10)}
For a version that works both from powershell console and cmd:
powershell -command "&.\test.ps1 (1..10)"
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:
powershell.exe -EncodedCommand "$([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('.\ParameterTest.ps1 (1..10)')))"
精彩评论