использование массива внутри оператора foreach powershell - PullRequest
0 голосов
/ 14 марта 2019

У меня есть массив, содержащий папки, мне нужно запустить команду приложения для каждой из папок, поэтому я использую команду foreach.Однако в списке аргументов мне нужно указать путь к каждой папке в отдельности, так что, скажем, у меня есть 4 папки (Folder1, Folder2, Folder3, Folder4), а в блоке скрипта foreach мне нужно запустить-Process с -Argumentlist, содержащим несколько команд приложенияи имя папки.То же действие для каждой папки соответственно.

У меня проблема с запуском ArgumentList для каждой папки с разными папками из одного и того же массива.Я пытался быть ясным, но дайте мне знать, если это все еще недостаточно понятно.

То, что я пытался выяснить, это в значительной степени мои заметки:

$folders=Get-ChildItem C:\AppFolder
$argum="-appcommand /path/$folders"

foreach ($folder in $folders) {
    Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList $argum
}

Я не могу написать отдельную строку для каждой папки, потому что они будут различаться на каждом компьютере, и мне нужно полностью автоматизированное решение.

Я знаю, что это сбивает с толку, поэтому я постараюсь переписать этот шаг за шагом, что яхочу добиться.Мне нужно автоматизировать это:

Для каждой папки, хранящейся в $ folder = Folder1, Folder2, Folder3, Folder4

Для Folder1: Start-Process -FilePath 'C: \ Program Files \ App1 \run.exe '-ArgumentList' -appcommand / path / Folder1 '(Примечание: -appcommand / path / является константой)

Для папки 2: Start-Process -FilePath' C: \ Program Files \ App1 \ run.exe '-ArgumentList' -appcommand / path / Folder2 '

Для папки 3: запуск-процесс -FilePath' C: \ Program Files \ App1 \ run.exe '-ArgumentList' -appcommand / path / Folder3 '

Для папки 4: Start-Process -FilePath 'C: \ Program Files \ App1 \ run.exe' -ArgumentList '-appcommand / path / Folder4'

РЕДАКТИРОВАТЬ: мне удалосьобойти это, используя новые комбинированные переменные, а затем запустить их, используя выражение-выражение.Ниже то, что я сделал в двух словах.

$items=Get-ChildItem C:\AppFolder -Directory | select -ExpandProperty Name
$argum="Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList '-appcommand ""/Path/"

foreach ($item in $items) {

    $Tasks=$argum+$item+"""'"
    Invoke-Expression $Tasks
}

Я знаю, что это решение для клейкой ленты, но в итоге оно работает.Спасибо добрым людям за ваш вклад!

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

РЕДАКТИРОВАТЬ: мне удалось обойти это с помощью новых комбинированных переменных, а затем запустить их с помощью выражения-выражения.Ниже то, что я сделал в двух словах.

$items=Get-ChildItem C:\AppFolder -Directory | select -ExpandProperty Name
$argum="Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList '-appcommand ""/Path/"

foreach ($item in $items) {

    $Tasks=$argum+$item+"""'"
    Invoke-Expression $Tasks
}

Я знаю, что это решение для клейкой ленты, но в конце концов оно работает.Спасибо добрым людям за ваш вклад!

0 голосов
/ 14 марта 2019

Я не уверен, правильно ли я понял вашу проблему.

Но попробуйте так:

$folders=Get-ChildItem C:\AppFolder    
foreach ($folder in $folders) {
    Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList "-appcommand $($Folder.FullName)"
}
...