Start-ThreadJob
Crée des travaux en arrière-plan similaires à l’applet de Start-Job
commande .
Syntax
Start-ThreadJob
[-ScriptBlock] <ScriptBlock>
[-Name <String>]
[-InitializationScript <ScriptBlock>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ThrottleLimit <Int32>]
[<CommonParameters>]
Start-ThreadJob
[-FilePath] <String>
[-Name <String>]
[-InitializationScript <ScriptBlock>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ThrottleLimit <Int32>]
[<CommonParameters>]
Description
Start-ThreadJob
crée des travaux en arrière-plan similaires à l’applet de Start-Job
commande. La main différence est que les travaux qui sont créés s’exécutent dans des threads distincts au sein du processus local. Par défaut, les travaux utilisent le répertoire de travail actuel de l’appelant qui a démarré le travail.
L’applet de commande prend également en charge un paramètre ThrottleLimit pour limiter le nombre de travaux en cours d’exécution à la fois. À mesure que d’autres travaux démarrent, ils sont mis en file d’attente et attendent que le nombre actuel de travaux passe en dessous de la limite de limitation.
Exemples
Exemple 1 : Create travaux en arrière-plan avec une limite de threads de 2
Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } } -ThrottleLimit 2
Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } }
Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } }
Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 ThreadJob Running True PowerShell 1..100 | % { sleep 1;...
2 Job2 ThreadJob Running True PowerShell 1..100 | % { sleep 1;...
3 Job3 ThreadJob NotStarted False PowerShell 1..100 | % { sleep 1;...
Exemple 2 - Comparer les performances de Start-Job et de Start-ThreadJob
Cet exemple montre la différence entre Start-Job
et Start-ThreadJob
. Les travaux exécutent l’applet de Start-Sleep
commande pendant 1 seconde. Étant donné que les travaux s’exécutent en parallèle, le temps d’exécution total est d’environ 1 seconde, plus le temps nécessaire pour créer les travaux.
# start five background jobs each running 1 second
Measure-Command {1..5 | % {Start-Job {Start-Sleep 1}} | Wait-Job} | Select-Object TotalSeconds
Measure-Command {1..5 | % {Start-ThreadJob {Start-Sleep 1}} | Wait-Job} | Select-Object TotalSeconds
TotalSeconds
------------
5.7665849
1.5735008
Après avoir soustrait 1 seconde pour le temps d’exécution, vous pouvez voir que Start-Job
la création de cinq travaux prend environ 4,8 secondes. Start-ThreadJob
est 8 fois plus rapide, il faut environ 0,6 seconde pour créer cinq travaux. Les résultats peuvent varier dans votre environnement, mais l’amélioration relative doit être la même.
Exemple 3 : travaux Create à l’aide d’InputObject
Dans cet exemple, le bloc de script utilise la $input
variable pour recevoir des entrées du paramètre InputObject . Pour ce faire, vous pouvez également acheminer des objets vers Start-ThreadJob
.
$j = Start-ThreadJob -InputObject (Get-Process pwsh) -ScriptBlock { $input | Out-String }
$j | Wait-Job | Receive-Job
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
94 145.80 159.02 18.31 18276 1 pwsh
101 163.30 222.05 29.00 35928 1 pwsh
$j = Get-Process pwsh | Start-ThreadJob -ScriptBlock { $input | Out-String }
$j | Wait-Job | Receive-Job
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
94 145.80 159.02 18.31 18276 1 pwsh
101 163.30 222.05 29.00 35928 1 pwsh
Paramètres
-ArgumentList
Spécifie un tableau d’arguments ou de valeurs de paramètre pour le script spécifié par les paramètres FilePath ou ScriptBlock .
ArgumentList doit être le dernier paramètre sur la ligne de commande. Toutes les valeurs qui suivent le nom du paramètre sont des valeurs interprétées dans la liste d’arguments.
Type: | Object[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Spécifie un fichier de script à exécuter en tant que travail en arrière-plan. Entrez le chemin d’accès et le nom de fichier du script. Le script doit se trouver sur l’ordinateur local ou dans un dossier auquel l’ordinateur local peut accéder.
Lorsque vous utilisez ce paramètre, PowerShell convertit le contenu du fichier de script spécifié en bloc de script et exécute le bloc de script en tant que travail en arrière-plan.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InitializationScript
Spécifie les commandes à exécuter avant le début de la tâche. Placez les commandes entre accolades ({}
) pour créer un bloc de script.
Utilisez ce paramètre pour préparer la session dans laquelle la tâche s'exécute. Par exemple, vous pouvez l’utiliser pour ajouter des fonctions et des modules à la session.
Type: | ScriptBlock |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Spécifie les objets utilisés comme entrée dans le bloc de script. Il autorise également l’entrée de pipeline. Utilisez la $input
variable automatique dans le bloc de script pour accéder aux objets d’entrée.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
Spécifie le nom convivial de la nouvelle tâche. Vous pouvez utiliser le nom pour identifier le travail auprès d’autres applets de commande de travail, telles que l’applet de Stop-Job
commande .
Le nom convivial par défaut est « Job# », où « # » est un nombre ordinal incrémenté pour chaque travail.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Spécifie les commandes à exécuter dans la tâche en arrière-plan. Placez les commandes entre accolades ({}
) pour créer un bloc de script. Utilisez la $Input
variable automatique pour accéder à la valeur du paramètre InputObject . Ce paramètre est obligatoire.
Type: | ScriptBlock |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ThrottleLimit
Ce paramètre limite le nombre de travaux en cours d’exécution à la fois. Au démarrage des travaux, ils sont mis en file d’attente et attendent qu’un thread soit disponible dans le pool de threads pour exécuter le travail. La limite par défaut est de 5 threads.
La taille du pool de threads est globale pour la session PowerShell. La spécification d’un ThrottleLimit dans un appel définit la limite pour les appels suivants dans la même session.
Type: | Int32 |
Position: | Named |
Default value: | 5 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
Sorties
ThreadJob.ThreadJob