Question [Résolu] Attendre l'exécution d'un processus ?

Plus d'informations
il y a 7 ans 3 mois #28137 par dimshell
Bonjour,

J'ai un petit soucis lors de l’exécution de mon script vu qu'il n'attends pas la fin du windump de 150 échanges, il ne peut donc pas créer le second fichier de la variable $newcontenu et donc le csv.

Merci pour vos réponses.

J'ai bien sûr regardé sur le net.
J'utilisé start-sleep mais c'est pas top car ce n'est pas fiable à 100%
Donc le wiatforexit marche bien mais si une autre page powershell est lancée mon script va rester bloqué à l'infini.


[code:1]$Win=\"C:\Users\\Desktop\WinDump.exe -i 2 -q -n -t -c 150 tcp\"
$Nomexec=\"powershell.exe\"
$WorkingDir = \"C:\\"
$Winscan = \"C:\Users\\Documents\test.txt\"

Start-Process -FilePath $nomexec -ArgumentList $Win -RedirectStandardOutput C:\Users\\Documents\windumptest.txt

$p=get-process powershell
$p.WaitForExit()

$fichier = \"C:\Users\\Documents\windumptest.txt\"

$newcontenu = \"C:\Users\\Documents\windumptest2.txt\"

$Header = \"c1\",\"ipsrc\", \"portsrc\", \"ipdest\", \"portdest\", \"c6\"

$dump = Import-Csv $fichier -Header $Header -Delimiter \" \"



$dump | foreach {
$_.ipdest = $_.ipdest -replace \":\",\" \"
}

$result = $dump | foreach {
$portsrc = $_.ipsrc -replace [regex]\"([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\",\"\"
$ipsrc = ($_.ipsrc -split [regex]\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"«»)[1]
$portdest = $_.ipdest -replace [regex]\"([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\", \"\"
$ipdest = ($_.ipdest -split [regex]\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"«»)[1]
$_ | select @{n=\"ipsrc\";e={$ipsrc}},@{n=\"portsrc\";e={$portsrc}},@{n=\"ipdest\";e={$ipdest}},@{n=\"portdest\";e={$portdest}}
}

$result | foreach {
\"$($_.ipsrc);$($_.portsrc);$($_.ipdest);$($_.portdest)\"
} | Set-Content $newcontenu




$result| select ipsrc, portsrc, ipdest, portdest -Unique | export-csv C:\Users\\Documents\windump.csv \";\" -NoTypeInformation[/code:1]


Cordialement,

Message édité par: dimshell, à: 12/02/19 09:23

Message édité par: dimshell, à: 12/02/19 09:56

Message édité par: Arnaud, à: 15/02/19 08:59<br><br>Message édité par: Arnaud, à: 15/02/19 09:00

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 3 mois #28139 par Arnaud Petitjean
Bonjour dimshell,

Pourquoi n'essaies-tu pas d'attendre uniquement le process WinDump.exe ? En effet je vois dans ton code que tu lances un autre process PowerShell pour lancer windump...

Pour moi, je ne vois pas de raison pour laquelle ça ne pourrait pas marcher.

Si toute fois la méthode WaitForExit() n'était pas fiable, tu pourrais faire une boucle qui récupère les processus et vérifier que Windump n'y est plus.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 3 mois #28143 par dimshell
Réponse de dimshell sur le sujet Re:Powershell attendre l'exec
Merci pour ta réponse.

Mais comment attendre le processus WinDump?
car si je renseigne le processus WinDump dans mon get-process j'ai une erreur.
\&quot;get-process : Impossible de trouver un processus nommé « WinDump ». Vérifiez le nom du processus et appelez de nouveau l'applet de commande.\&quot;

Pourtant je lance un get-process à coté pour voir les processus en cours et c'est bien noté WinDump

Enfaîte c'est bizarre comme truc parce que lorsque je lance mon script depuis powershell ISE ça marche niquel.

-Depuis une tâche planifié non. Il tourne en boucle.

Quand je l'exécute en faisant clique droit \&quot;exéc avec powershell\&quot; il m'ouvre une nouvelle fenêtre donc mon script ne s'arrête jamais.
Donc j'avais rajouter comme option -NoNewWindow mais le problème c'était que le windump avait fini la page resté ouverte et il faut la fermer à la main =(

Message édité par: dimshell, à: 12/02/19 12:52<br><br>Message édité par: dimshell, à: 12/02/19 12:55

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 3 mois #28144 par Sinjk
Réponse de Sinjk sur le sujet Re:Powershell attendre l'exec
Salut,

Pourquoi ne mets tu pas ton start-process dans un job ?

[code:1]

$Win=\&quot;C:\Users\\Desktop\WinDump.exe -i 2 -q -n -t -c 150 tcp\&quot;

$Nomexec=\&quot;powershell.exe\&quot;

$WorkingDir = \&quot;C:\\&quot;

$Winscan = \&quot;C:\Users\\Documents\test.txt\&quot;
$WinDumpJob = Start-Job -ScriptBlock {
Start-Process -FilePath $nomexec -ArgumentList $Win -RedirectStandardOutput C:\Users\\Documents\windumptest.txt
}
Try{
if((Wait-Job -Job $WinDumpJob -Timeout 10).State -eq \&quot;Completed\&quot;«»){
Receive-Job -Job $WinDumpJob
}
}Catch{
Stop-Job -Job $WinDumpJob
}Finally{
Remove-Job -Job $jobWinDumpJob
}

$fichier = \&quot;C:\Users\\Documents\windumptest.txt\&quot;



$newcontenu = \&quot;C:\Users\\Documents\windumptest2.txt\&quot;



$Header = \&quot;c1\&quot;,\&quot;ipsrc\&quot;, \&quot;portsrc\&quot;, \&quot;ipdest\&quot;, \&quot;portdest\&quot;, \&quot;c6\&quot;



$dump = Import-Csv $fichier -Header $Header -Delimiter \&quot; \&quot;







$dump | foreach {

$_.ipdest = $_.ipdest -replace \&quot;:\&quot;,\&quot; \&quot;

}



$result = $dump | foreach {

$portsrc = $_.ipsrc -replace [regex]\&quot;([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\&quot;,\&quot;\&quot;

$ipsrc = ($_.ipsrc -split [regex]\&quot;([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\&quot;«»)[1]

$portdest = $_.ipdest -replace [regex]\&quot;([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\&quot;, \&quot;\&quot;

$ipdest = ($_.ipdest -split [regex]\&quot;([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\&quot;«»)[1]

$_ | select @{n=\&quot;ipsrc\&quot;;e={$ipsrc}},@{n=\&quot;portsrc\&quot;;e={$portsrc}},@{n=\&quot;ipdest\&quot;;e={$ipdest}},@{n=\&quot;portdest\&quot;;e={$portdest}}

}



$result | foreach {

\&quot;$($_.ipsrc);$($_.portsrc);$($_.ipdest);$($_.portdest)\&quot;

} | Set-Content $newcontenu









$result| select ipsrc, portsrc, ipdest, portdest -Unique | export-csv C:\Users\\Documents\windump.csv \&quot;;\&quot; -NoTypeInformation


[/code:1]

PS: Je suis pas du tout sûr de la syntaxe pour le scriptblock<br><br>Message édité par: Sinjk, à: 12/02/19 12:58

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 3 mois #28145 par dimshell
Réponse de dimshell sur le sujet Re:Powershell attendre l'exec
Merci pour ta réponse.



L'erreur viens des variables en dehors des {}


Alors j'ai une erreur au niveau de ta variable $JobWin....
Et une autre au niveau du -FilePath du start-Process

[code:1]Impossible de valider l'argument sur le paramètre «FilePath». L’argument est Null ou vide. Indiquez un argument qui n’est pas Null ou vide et
réessayez.
+ CategoryInfo : InvalidData : (:«») [Start-Process], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.StartProcessCommand
+ PSComputerName : localhost

Remove-Job : Impossible de valider l'argument sur le paramètre «Job». L’argument est Null ou vide. Indiquez un argument qui n’est pas Null ou
vide et réessayez.
Au caractère Ligne:15 : 21
+ Remove-Job -Job $jobWinDumpJob
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData : (:«») [Remove-Job], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.RemoveJobCommand
[/code:1]
Message édité par: dimshell, à: 12/02/19 13:14

Message édité par: dimshell, à: 12/02/19 14:02

Message édité par: dimshell, à: 12/02/19 14:10<br><br>Message édité par: Arnaud, à: 12/02/19 14:53

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 3 mois #28152 par Arnaud Petitjean
Les jobs effectivement peuvent être une bonne alternative, mais pour l'instant je te propose de finir d'explorer la 1ere piste concernant Get-Process.

Pour identifier le nom du process, voilà ce que l'on peut faire :

[code:1]# Récupération des processus à un instant t
$avant = Get-Process

# Lancement d'une application, par exemple Windump.exe ou calc.exe
calc.exe

# Récupération des processus à un instant t + 1
$apres = Get-Process

# Comparaison des objets pour trouver l'intrus
Compare-Object -ReferenceObject $avant -DifferenceObject apres[/code:1]

Exemple de résultat chez moi :

[code:1]PS C:\&gt; Compare-Object -ReferenceObject $avant -DifferenceObject $apres

InputObject SideIndicator

System.Diagnostics.Process (Calculator) =&gt;
[/code:1]

La flèche vers la droite indique que l'objet n'existe que dans la variable $apres et le nom du processus se trouve entre parenthèses, soit Calculator dans mon exemple.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.047 secondes
Propulsé par Kunena