PowerShell
Postes de travail PowerShell
Recherche…
Introduction
Des travaux ont été introduits dans PowerShell 2.0 et ont permis de résoudre un problème inhérent aux outils de ligne de commande. En bref, si vous lancez une longue tâche, votre invite est indisponible jusqu'à la fin de la tâche. À titre d'exemple d'une longue tâche, pensez à cette simple commande PowerShell:
Get-ChildItem -Path c: \ -Recurse
Il faudra un certain temps pour récupérer la liste complète des répertoires de votre lecteur C :. Si vous l'exécutez en tant que Job, la console récupérera le contrôle et vous pourrez capturer le résultat ultérieurement.
Remarques
Les jobs PowerShell s'exécutent dans un nouveau processus. Cela a des avantages et des inconvénients qui sont liés.
Avantages:
- Le travail s'exécute dans un processus propre, y compris l'environnement.
- Le travail peut être exécuté de manière asynchrone sur votre processus PowerShell principal
Les inconvénients:
- Les modifications de l'environnement de processus ne seront pas présentes dans le travail.
- Les paramètres transmis et les résultats renvoyés sont sérialisés.
- Cela signifie que si vous modifiez un objet de paramètre pendant l'exécution du travail, il ne sera pas répercuté dans le travail.
- Cela signifie également que si un objet ne peut pas être sérialisé, vous ne pouvez ni le transmettre ni le renvoyer (bien que PowerShell puisse copier des paramètres et transmettre / renvoyer un objet PSObject).
Création d'emplois de base
Commencez un bloc de script en tâche de fond:
$job = Start-Job -ScriptBlock {Get-Process}
Lancer un script en tâche de fond:
$job = Start-Job -FilePath "C:\YourFolder\Script.ps1"
Démarrez un travail en utilisant Invoke-Command
sur un ordinateur distant:
$job = Invoke-Command -ComputerName "ComputerName" -ScriptBlock {Get-Service winrm} -JobName "WinRM" -ThrottleLimit 16 -AsJob
Démarrer le travail en tant qu'utilisateur différent (invite le mot de passe):
Start-Job -ScriptBlock {Get-Process} -Credential "Domain\Username"
Ou
Start-Job -ScriptBlock {Get-Process} -Credential (Get-Credential)
Démarrer le travail en tant qu'utilisateur différent (pas d'invite):
$username = "Domain\Username"
$password = "password"
$secPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username, $secPassword)
Start-Job -ScriptBlock {Get-Process} -Credential $credentials
Gestion de base
Obtenez une liste de tous les travaux de la session en cours:
Get-Job
En attente d'un travail pour terminer avant d'obtenir le résultat:
$job | Wait-job | Receive-Job
Expire un travail s'il est trop long (10 secondes dans cet exemple)
$job | Wait-job -Timeout 10
Arrêt d'un travail (termine toutes les tâches en attente dans cette file d'attente avant la fin):
$job | Stop-Job
Supprimer le travail de la liste des travaux en arrière-plan de la session en cours:
$job | Remove-Job
Remarque : Les éléments suivants ne fonctionnent que sur les travaux de Workflow
.
Suspendre un job de Workflow
(Pause):
$job | Suspend-Job
Reprendre un job de Workflow
:
$job | Resume-Job