2016-03-04 3 views
1

Я пытаюсь выполнить параллельные команды для данных (например, список имен серверов), которые импортируются через CSV и вызывается ForEach-Object. Я обнаружил, что foreach имеет параллельный метод, но оказывается, что ForEach-Object этого не делает. Я обеспокоен хорошей производительностью, как я ударил несколько серверов, чтобы читать данные журнала, и имеют следующие параметры:Возможно выполнение команд ForEach-Object в Parallel

1) PowerShell Workflow 
2) PowerShell Background Job 
3) Invoke-Command 

Когда я попробовал вариант 3, она не смогла, как я попытался отправить аргументы через -ArgumentList, но Бесполезный «т, кажется, как переменные, я толкал из CSV в виде:

$($_.'CSVColumnValue') 

можно ли выполнять команды параллельно с использованием ForEach-Object, и если да, то рекомендуемый метод для достижения этой цели?

+1

пожалуйста, добавьте свой код на свой вопрос, в противном случае это трудно давать советы – SimonS

+1

Вы также можете посмотреть на [Invoke-ScriptAsync] (HTTPS : //mjolinor.wordpress.com/2014/06/03/invoke-scritptasync-v2/), который использует пулы RunSpace для быстрого запуска сценария по списку серверов. – user4317867

ответ

2

Нет такой вещи, как «ForEach-Object -Parallel», поскольку она выполняется в конвейере. Проверьте Erik Meijer and Jeffrey Snover at MSDN Channel 9; эти люди получают тонкие черты на конвейере PowerShell. Это вид с 2008 года, длится более часа, но все же ... отлично работает на работу трубопровода.

«ForEach -Parallel» - это конструктор, а не конвейер. Он является частью модуля Workflow и представлен в Windows PowerShell 3.0.

Сравнить:

$Items = 1..42 
ForEach -Parallel ($Item in $Items) { 
$Item 
} 

С:

1..42 | ForEach-Object -Process { $_ } 
Смежные вопросы