2

私は Powershell にかなり慣れていないので、コードの並列実行にほとんど問題はありません。私の現在のコードは順番に動作しますが、これまでのところ、並列に実行しようとする試みはすべて失敗しました。これが私がやろうとしていることです:

必要なすべての情報を収集するために、複数のドメイン コントローラーにクエリを実行する必要があります (Quest コマンドレットから get-qaduser などを使用します)。現在、1 つのドメイン コントローラから別のドメイン コントローラに接続しているため、スクリプトの実行に時間がかかります。私の考えは、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 
    }
}

それらを追加するだけでは機能しません。inlinescript コマンドを使用しても、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 コマンドレットを並行して実行することだけです。どんな助けでも大歓迎です!

4

1 に答える 1

0

エラーは、QuestModuleがワークフローセッションにインポートされていないことを示しています。次のようにしてみてください...ワークフローセッションを$Session変数内に取得してください

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

これがお役に立てば幸いです、クリス

于 2013-01-31T15:26:28.967 に答える