Я новичок в Powershell, и у меня небольшие проблемы с параллельным запуском кода. Мой текущий код работает последовательно, но пока все попытки заставить его работать параллельно не увенчались успехом. Вот что я планирую сделать:
Мне нужно запросить несколько контроллеров домена (я использую get-qaduser и т. д. из командлетов Quest), чтобы собрать всю необходимую мне информацию. Поскольку я в настоящее время связываюсь с одним контроллером домена другим, сценарий выполняется долго. Моя идея состояла в том, чтобы использовать новую функцию рабочего процесса PS 3.0, но мне явно не разрешено экспортировать результаты в файл.
Рабочий скрипт (по порядку):
Add-PSSnapin Quest.ActiveRoles.ADManagement
get-QADUser -Service 'domaincontroller:389' -SizeLimit 0 > OutputFile.csv
get-QADUser -Service 'domaincontroller2:389' -SizeLimit 0 > OutputFile2.csv
and so on
Вот что я пробовал до сих пор:
Just an excerpt - there are more get-qaduser and domains in the real script
Workflow Get-Domainaccounts{
Parallel{
get-QADUser -Service 'domaincontroller:389' -SizeLimit 0
}
}
но во время работы я получаю это сообщение об ошибке:
Microsoft.PowerShell.Utility\Write-Error : The term 'get-QADUser' is not
recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify
that the path is correct and try again.
Поэтому я подумал о добавлении фрагментов в свой рабочий процесс:
Workflow Get-Domainaccounts{
inlinescript {Add-PSSnapin Quest.ActiveRoles.ADManagement}
Parallel{
get-QADUser -Service 'domaincontroller:389' -SizeLimit 0
}
}
простое их добавление не работает, использование встроенной команды не передает ее потоку, в котором выполняется get-QADUser. Я также пытался добавить оснастку через свой профиль, но рабочий процесс ее игнорирует.
В Technet я нашел эту функцию, которая на самом деле работает для встроенных командлетов, но опять же не для инструментов Quest. ForEach-Parallel.ps1 Функция использует чистую среду выполнения (которая Я предполагаю, что рабочий процесс также работает).
Вот как я пытался его запустить:
the hosts.txt contains:
get-QADUser -Service 'domaincontroller:389' -SizeLimit 0 > OutputFile.csv
get-content .\hosts.txt | ForEach-Parallel -ScriptBlock {
$_ | invoke-expression
}
Но я не получаю никакого вывода - ни сообщения об ошибке, ничего. Запуск кода без | invoke-expression работает и показывает мне содержимое файла. Что я делаю не так?
Все, что я хочу сделать, это запустить командлеты Quest параллельно. Любая помощь высоко ценится!