Запустите командлет Quest параллельно и сохраните вывод в файл

Я новичок в 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 параллельно. Любая помощь высоко ценится!


person Asdaha Ahsla    schedule 31.01.2013    source источник
comment
Читайте здесь: technet.microsoft.com/en-us/library/jj134157.aspx   -  person CB.    schedule 31.01.2013
comment
у тебя есть ответы?   -  person Alban    schedule 28.02.2015


Ответы (1)


Ваша ошибка указывает на то, что модуль Quest не импортирован в сеанс рабочего процесса, попробуйте что-то вроде этого... Получите сеанс рабочего процесса внутри переменной $Session

Invoke-Command -Session $Session -ScriptBlock {Import-Module <ModuleName> -Verbose}

Надеюсь, это поможет, Крис

person Christopher Douglas    schedule 31.01.2013
comment
Я не могу запустить Invoke-Command из рабочего процесса следующим образом: Invoke-Command -Session $Session -ScriptBlock {Add-PSSnapinQuest.ActiveRoles.ADManagement} -verbose, потому что эту команду нельзя использовать в рабочих процессах. - person Asdaha Ahsla; 31.01.2013
comment
Конечно, вызов нельзя использовать в рабочем процессе. но если вы увидите мое последнее замечание перед кодом — получите сеанс вашего рабочего процесса внутри переменной $Session — $Session = Get-PsSession, при условии, что единственный сеанс, работающий на коробке, — это сеанс рабочего процесса. Начните с New-PsWorkflowSession, введите его в эту переменную, а затем — вне рабочего процесса. Вызовите команду. - person Christopher Douglas; 31.01.2013
comment
Я попробовал то, что вы предложили, но добавление модуля не удалось внутри этого сеанса. Термин «Add-PSSnapinQuest.ActiveRoles.ADManagement» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Get-modules также не показывали инструменты квеста - есть другие идеи, как я мог бы это сделать? - person Asdaha Ahsla; 01.02.2013