Powershell - comment pré-évaluer les variables dans un scriptblock pour les Start-Emploi
Je veux utiliser le fond d'emplois dans Powershell.
Comment faire de variables évaluées au moment de ScriptBlock définition?
$v1 = "123"
$v2 = "asdf"
$sb = {
Write-Host "Values are: $v1, $v2"
}
$job = Start-Job -ScriptBlock $sb
$job | Wait-Job | Receive-Job
$job | Remove-Job
- Je obtenir de l'imprimé vide les valeurs de $v1, $v2. Comment puis-je les avoir évalués dans (passé) la scriptblock et donc à la tâche en arrière-plan?
OriginalL'auteur Ivan | 2013-11-07
Vous devez vous connecter pour publier un commentaire.
Une façon est d'utiliser l' [scriptblock]::méthode create pour créer le bloc de script à partir d'un expanadable chaîne à l'aide de variables locales:
Une autre méthode est de définir des variables dans le InitializationScript:
Une troisième option est d'utiliser le paramètre-Argumentlist:
Commentant ici au cas où quelqu'un est à la recherche d'une réponse à pourquoi
Register-ScheduledJob
se plaint d'une variable dans le-ScriptBlock
param. Les erreurs observées sont Ne peut pas lier argument pour le paramètre 'serveur', parce que c'est une chaîne vide. et pour le résoudre, j'ai utilisé$script = [ScriptBlock]::Create("")
puisRegister-ScheduledJob -ScriptBlock $script
et sa confirmé travailler en utilisantGet-ScheduledJob | Select *
OriginalL'auteur mjolinor
La solution la plus simple (ce qui nécessite une V3 ou plus) ressemble à ceci:
Vous pouvez penser de $à l'aide de travail à peu près explicite param() de bloc et en passant -ArgumentList, seulement PowerShell gère pour vous automatiquement.
OriginalL'auteur Jason Shirk
Déclarer les valeurs des paramètres dans le bloc de script, puis de les transmettre à l'aide de
-ArgumentList
OriginalL'auteur David Martin
Je ne suis pas devant un ordinateur pour valider, mais cela devrait fonctionner:
Je vais doubler vérifier cela quand je suis dans le travail.
OriginalL'auteur beavel