1

関数foreach-parallelを使用して、runspace のような多くのスクリプト ブロックを実行し、最初のロード スナップインを正しく実行しますが、次はすべて 2 エラーを返します

1..5 | Foreach-Parallel -Throttle 5 -Timeout 5 -sleeptimer 5 {
   add-PSSnapin 'Quest.ActiveRoles.ADManagement'
    try {
        get-qadUser 'Domain\me'
    } catch {
        return "$($Error[0].Exception)"
    }
}

私のエラーは:

add-PSSnapin : 同じキーを持つアイテムが既に追加されています

get-qadUser : 関数が存在しません

4

4 に答える 4

1

runspacePool では、コマンドが機能Add-PSSnapinImport-Moduleません。ScriptBlock ではなく、Initial Default State に追加する必要があります。

    $ISS = [system.management.automation.runspaces.initialsessionstate]::CreateDefault()
    [void]$ISS.ImportPSSnapIn('Quest.ActiveRoles.ADManagement', [ref]$null)
    [void]$ISS.ImportPSModule('PSTerminalServices')
    $RunspacePool = [runspacefactory]::CreateRunspacePool(1, $MaxThreads, $ISS, $Host)
    $RunspacePool.Open()
于 2016-03-15T09:59:09.387 に答える
0

私はあなたがすべきだと思うことについて上記のコメントをしましたが、明確にするために、呼び出しの前にスナップインがロードされていることを確認したいので、実行する前に実行されていることを確認してくださいForeach-parallel.

add-PSSnapin 'Quest.ActiveRoles.ADManagement'

Foreach-Parallel -Throttle 5 -Timeout 5 -sleeptimer 5 {
   get-qadUser 'domain\testUser'
}
于 2016-03-11T17:42:36.790 に答える
0

コマンドレットをテストする簡単な方法があり、見つからない場合は PSSnapin またはImport-Module

以下をスクリプトの先頭に追加すると、CMDLET の存在がチェックされ、見つからない場合は追加されます。

IF(
 Get-Command get-qadUser -ErrorAction SilentlyContinue){}
ELSE{add-PSSnapin 'Quest.ActiveRoles.ADManagement'}
于 2016-03-11T17:46:25.343 に答える