2015-06-16 2 views
3

Мне нужно передать массив подпроцессу PowerShell и задавался вопросом, как я могу превратить переменную окружения (строку) в массив PowerShell. Есть ли соглашение, в котором я должен следовать, чтобы PowerShell автоматически выполнил это для меня, или мне просто нужно самому разобрать его?Включить переменную окружения в массив

Я ищу что-то похожее на то, что может сделать bash. Если установить переменную окружения, такие как:

MYARR = one two three 

Он будет автоматически интерпретироваться bash как массив, так что я могу сделать:

for a in ${MYARR[@]} ; do 
    echo Element: $a 
done 

И возвратится:

Element: one 
Element: two 
Element: three 

Есть ли способ, которым я могу сделать то же самое в PowerShell?

+3

Вы можете использовать опцию -split в строке и указать разделитель –

ответ

4

Разделите значение переменной среды на любом разделителе. Пример:

 
PS C:\>$env:Path 
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\ 
PS C:\>$a = $env:Path -split ';' 
PS C:\>$a 
C:\WINDOWS\system32 
C:\WINDOWS 
C:\WINDOWS\System32\Wbem 
C:\WINDOWS\System32\WindowsPowerShell\v1.0\ 
PS C:\>$a.GetType().FullName 
System.String[] 

Edit: Эквивалент PowerShell для bash подобный код

for a in ${MYARR[@]} ; do 
    echo Element: $a 
done 

будет

$MYARR -split '\s+' | ForEach-Object { 
    "Element: $_" 
} 

Использование $env:MYARR вместо $MYARR, если переменная является фактический вместо переменной PowerShell.

+1

Был бы готов ответить на этот вопрос ..... * shakes fist * – Matt

+0

Спасибо за предложение, но мне нужно будет изменить сценарий вызова и добавить команда разделения сверху. Я не был точен в моем первоначальном вопросе, поэтому, пожалуйста, взгляните на мое редактирование. – Jacek

+0

@Jacek Я не понимаю, почему вы думаете, что вам нужно будет поместить split в вызывающий скрипт. –

Смежные вопросы