Les Variables en Début de Travail

J'ai ce code powershell, qui j'aimerais travailler. Elle ne dispose actuellement pas d'évaluer l' $agent variable.

foreach($agent in $agentcomputers){
Write-Output 'Starting agent on '$agent
#psexc to start the agent
Start-Job -ScriptBlock {& psexec $agent c:\grinder\examples\startAgent.cmd}
}

Cela ressemble à mon problème, sauf que je ne suis pas d'appel externe script powershell.

https://sqlblog.org/2011/01/29/powershell-start-job-scriptblock-sad-panda-face

J'ai essayé d'ajouter que, à l'aide de $args[0] $de l'agent et de l'ajout de l'-ArgumentList paramètres, mais cela ne fonctionne pas.

Merci pour toute aide que vous pouvez fournir.

Modifications/Réponses...


C'est $agentcomputers, juste une liste de noms d'ordinateur. Chacun sur sa propre ligne.

$agentcomputers = Get-Content c:\grinder-dist\agent-computers.txt

J'ai aussi essayé cette - et $args[0] n'a pas d'évaluer

Start-Job -ScriptBlock {& psexec $args[0] c:\grinder\examples\startAgent.cmd} -ArgumentList @($agent)
Ce qui est stocké dans $agent?
Vous aurez besoin d'utiliser la ArgumentList paramètre à l'aide de la $args tableau ou d'un bloc param.
Vous pouvez également modifier la portée de votre $agent de variable, je pense: $global:de l'agent.
la portée mondiale ne fonctionne pas comme il est exécuté dans un autre PowerShell.exe processus. Les données sont sérialisées et passé à l'arrière-plan.
Vous pouvez avoir besoin des barres obliques inverses selon psexec documentation "\\$args[0]". Assurez-vous que la commande fonctionne par lui-même sans tâche en arrière-plan.

OriginalL'auteur Sam | 2012-04-17