Как передать параметр массива в powershell -file? - PullRequest
4 голосов
/ 07 октября 2011

У меня есть следующий скрипт powershell:

param(
    [Int32[]] $SomeInts = $null, 
    [String]$User = "SomeUser", 
    [String]$Password = "SomePassword"
)

New-Object PSObject -Property @{
    Integers = $SomeInts;
    Login = $User;
    Password = $Password;
} | Format-List

Если я выполню .\ParameterTest.ps1 (1..10), я получу следующее:

Password : SomePassword
Login    : SomeUser
Integers : {1, 2, 3, 4...}

Однако я не получаю ожидаемых результатов, если запускаю его в отдельном экземпляре powershell, подобном этому powershell -file .\ParameterTest.ps1 (1..10). В этом случае я получаю следующее:

Password : 3
Login    : 2
Integers : {1}

У меня вопрос: как передать массив или другой сложный тип данных из командной строки?

Ответы [ 2 ]

6 голосов
/ 07 октября 2011

Отдельные элементы массива (1..10) передаются в качестве параметров в сценарий.

Альтернативой было бы сделать:

powershell -command {.\test.ps1 (1..10)}

Для версии, которая работает как с консоли powershell, так и с cmd:

powershell -command "&.\test.ps1 (1..10)"
2 голосов
/ 07 октября 2011

Ответ должен использовать powershell.exe -EncodedCommand и для base64 кодировать параметры.Описание этого можно найти на странице технической справки Консоль PowerShell.exe .Я сжал их версию церемонии, чтобы сделать это в одну строку:

powershell.exe -EncodedCommand "$([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('.\ParameterTest.ps1 (1..10)')))"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...