Question
Job et Invoke-Command
- Arthur
- Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 226
- Remerciements reçus 0
(powershell-scripting.com/index.php?optio...;id=6719&catid=5)
J'ai décidé de l'améliorer pour qu'il marche avec un Ip range de type : \"192.168.1.120-192.168.1.128\" l'utilisateur n'aurait donc plus qu'a taper le ip range et le programme récupère toutes les informations.
Dans un souci de rapidité j'ai décidé d'utiliser les Start-Job pour qu'il traite le tout de façon parallèle.
Seulement voilà les job bloquent avec Invoke-Comand et restent sur running. Et je ne sait pas pourquoi.
Pour illustrer mon problème j'ai tapé un nouveau script simplifiant le problème à l'extrême.(cf pièce jointe)
J'ai aussi testé mon script en utilisant -AsJob sur le invoke-command mais cela complique encore plus le problème.
Je pense que le problème est stupide mais je n'arrive pas à voir pourquoi \"Invoke-Command\" bloque.
La pièce jointe recup_ip.ps1 est absente ou indisponible
EDIT : Bon j'ai test le script sur mes VM il marche.
Mais il bug en condition \"réel\".
Existe-t-il un moyen pour voir si Invoke-command retourne une erreur? et l'afficher?
Je pense que le problème viens du paramètre credential de Invoke-command.<br><br>Message édité par: bilbao, à: 7/05/10 13:57
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
bilbao écrit:
Il me semble que dans ton contexte c'est soit l'un (Start-Job) soit l'autre (Invoke-Commande -AsJob).J'ai aussi testé mon script en utilisant -AsJob sur le invoke-command mais cela complique encore plus le problème.
Le code proposé précédemment, que tu réutilises dans ton exemple, n'est pas \"générique\", il répondait à un besoin dans un contexte particulier. Il te faut l'adapter si toutefois il n'y a pas de meilleure approche.
[code:1]$CurrentJob=Invoke-Command -ComputerName $Nom_pc -asJob -Credential $cred -ScriptBlock {
...
[/code:1]
La manipulation du résultat se fait dans le traitement lié à l'abonné, s'il existe :
[code:1] Switch ($eventname) {
'Completed' {
#Récupère les infos
Receive-Job -id $Sender.Id |
Export-Csv -Path \"C:\Liste-process.csv\"[/code:1]
Alors si :
bilbao écrit:
Comme les événements sont traités les uns à la suite des autres ton fichier ne risque pas d'être verrouillé (un écrivain / N lecteurs).il traite le tout de façon parallèle.
Dans les autres cas je ne sais pas si cela peut poser pb.
bilbao écrit:
D'aprés la doc elle le sera dans le résultat émis, une erreur est aussi un objet.<br><br>Message édité par: Laurent Dardenne, à: 7/05/10 14:09Existe-t-il un moyen pour voir si Invoke-command retourne une erreur? et l'afficher ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 226
- Remerciements reçus 0
Ce que je comprend pas c'est que cela bloque avec un commande toute conne
[code:1]
PS D:\ahemon\Scripts> Start-Job -ArgumentList $cred -ScriptBlock { param ($cred) Invoke-Command -computername 192.168.1.2 -credential $cred -scriptblock { Get-process } }
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Soit c'est un bug soit tu utilises cette commande dans un contexte qui n'est pas le sien.Ce que je comprend pas c'est que cela bloque avec un commande toute conne
:
Par exemple le premier exemple fonctionne, le second aussi, mais pas le troisième qui rencontre le même problème que tu as énoncé :
[code:1]
$j=invoke-command -computername LocalHost -scriptblock {sleep 5;get-process powershell} -asjob
$p=start-job -scriptblock {invoke-command -computername LocalHost -scriptblock {get-process powershell}}
$p2=start-job -scriptblock {invoke-command -computername LocalHost -scriptblock {get-process powershell} -asjob }
[/code:1]
La dernière commande créee un job dans un job, chaque job est lui même constitué d'un job primaire et de job fils :
[code:1]$p2.childjobs[/code:1]
Est-ce un pb d'imbrication ? Je ne sais pas.
En tous cas si un cmdlet propose le paramètre -asjob, il y a de forte chance, je ne pas vérifié le code, qu'il soit à privilégier en lieu et place de Start-Job.
Tu peux aussi consulter l'exemple 8 proposé dans l'aide de Invoke-Commande.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 226
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
C'est une erreur de ma part, désolé, j'ai le même soucis.Le truc qui rend fou c'est que justement ton deuxième exemple ne marche pas sur mon PC,il bloque sur running sans erreur ni rien, meme avec localhost
Je voulais mettre en évidence l'usage de Invoke-commande avec et sans le paramètre -AsJob :
[code:1]invoke-command -computername LocalHost -scriptblock {sleep 5;get-process powershell}
$j=invoke-command -computername LocalHost -scriptblock {sleep 5;get-process powershell} -asjob
[/code:1]
Il me semble avoir vu sur MSConnect un rapport signalant un pb +- identique...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Job et Invoke-Command