Question [Fonction] Verifier présence d'un processus

Plus d'informations
il y a 15 ans 11 mois #2044 par Robin
Bonjour,
Je tiens à préciser d'avance que j'me suis triturer le cerveau pour comprendre ce qui n'allez pas dans mon script.

Voila la dite fonction :
Les variables sont définies dans le fichier pour faciliter l'utilisation, au même titre que l'execution de la fonction et de l'affichage de ce dernier.

[code:1]#* FileName: FunctionTemplate.txt
#*=============================================================================
#* FUNCTION LISTINGS
#*=============================================================================
#* Function: GetProcess
#* Created: 20/03/2008
#* Author: Robin Aleman
#* Arguments: /
#*=============================================================================
#* Purpose: Permet de verifier l'existance d'un processus sur un ordinateur distant.
#* Renseigner les variables $computer (Nom de l'ordinateur cible) et $process nom du processus (ne pas metre l'extention *.exe)
#* Si processus en ligne : statusprocess = 1 / sinon statutsprocess = 0
#*
#*
#*=============================================================================
#* Variables
#* $computer
#* $process
#*
#*
#*

$computer = \"d0036\"
$process = \"explorer\"

function GetProcess {
$pstatut = [System.Diagnostics.Process]::GetProcesses($computer) | Select-Object -Property Name | Where-Object -FilterScript { $_.Name -eq $process}

$pstatut

if ($pstatut.Name -eq $process )
{ $petat = \"1\" } else
{ $petat = \"0\" }
}


GetProcess
Write-Host $petat

if ($petat -eq 1)
{ Write-Host \"La session est ouverte\" } else
{ Write-Host \"La session est fermé\" }
[/code:1]

L'objectif est assez explicite je pense; le but est de savoir si une session est ouverte sur le poste distant.
Mais la fonction a pour seul objectif de signifier la présence d'un processus ou non.

Le problème : Si je modifie le nom de machine, le script s'exécute mal, il ne met pas a jour la variable $pstatut
Je ne sais pas si cela viens de l'éditeur (PowerShellPlus) mais j'ai eu le même symptôme avec la console Powershell et le même code (code tapé dans la console)

Je voudrais savoir si j'ai fait une erreur dans la syntaxe pour la création d'une fonction, ou si c'est le fonctionnement même de Powershell qui donne se résultat.
En vous remerciant,

Crazysky

Robin Aleman,
Apprenti au CHU-Montpellier
Débutant PowerShell

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

Plus d'informations
il y a 15 ans 11 mois #2049 par Laurent Dardenne
Salut,
Crazysky écrit:

Je voudrais savoir si j'ai fait une erreur dans la syntaxe pour la création d'une fonction

Non mais j'aurais une autre approche basée notamment sur l'usage de boolean :
[code:1]function GetProcess ([string] $OrdinateurCible, [string] $NomProcessus)
{
Return ([System.Diagnostics.Process]::GetProcesses($OrdinateurCible) | Where-Object {$_.Name -eq $NomProcessus}) -ne $null
}

if (GetProcess(\"d0036\",\"Explorer\"«»))
{Write-Host \"La session est ouverte\" }
else
{ Write-Host \"La session est fermé\" }
[/code:1]
Ce qui t'intéresse c'est si le process existe ou pas, on peut donc simplifier le pipe. De plus l'usage de la méthode GetProcessesByName semble préférable, consomme moins de ressources réseau.

Pour le pb d'exécution sur une machine distante il faut dans ce cas afficher les résultats intermédiaires
Et contrôler avec WMI les même données, si c'est possible.
Enfin il y a sûrement d'autres pistes...

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 11 mois #2056 par Robin Lemesle

Le problème : Si je modifie le nom de machine, le script s'exécute mal, il ne met pas a jour la variable $pstatut
Je ne sais pas si cela viens de l'éditeur (PowerShellPlus) mais j'ai eu le même symptôme avec la console Powershell et le même code (code tapé dans la console)


Comme dit BatchMan, il faut afficher les résultats intermédiaires. Car je ne comprends pas pourquoi ne marche pas. Tu as bien les droits ?

Exécuter seulement la requête WMI sur plusieurs postes à la suite et tiens nous au courant

Robin MVP PowerShell

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

Plus d'informations
il y a 15 ans 11 mois #2109 par Robin
J'ai pris en compte le script de batchMan, mais pour répondre à la problématique je reste sur mon script car je sais pas pourquoi cela risque de se reproduire.

Donc j'ai trouvé le \"hic\". Normalement si je tape
>GetProcess
Il est censé exécuter la fonction.
Jusque là pas de problème.
Cependant, si je re-exécute la fonction dans la même Instance PowerShell, il ne re-exécute pas le contenu de la fonction.

si je veux dans la même instance avoir des informations à jour, je dois executer \"$pstatut = [System.Diagnostics.Process]::GetProcesses($computer) | Select-Object -Property Name | Where-Object -FilterScript { $_.Name -eq $process}\" pour que toute la machine se mette à jour.

Donc si vous avez une idée de pourquoi PS me fait un truc pareil :-/

&gt;&gt; Pour information, oui j'ai les droits nécessaire. Ensuite si j'exécute juste la commande WMI il n'y a aucun problème. Le soucis ce situe au niveau de l'outil \&quot;function\&quot; :-/<br><br>Message édité par: Crazysky, à: 7/04/08 14:50

Robin Aleman,
Apprenti au CHU-Montpellier
Débutant PowerShell

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

Plus d'informations
il y a 15 ans 11 mois #2110 par Robin
BatchMan
Je ne connais pas du tout ce système de boolean.
Par contre ton script ne récupère pas les infos, ci dessous le message de debug :

[code:1]DEBUG: 1+ . 'c:.ps1'
DEBUG: ! CALL script 'Untitled6.ps1'
DEBUG: 1+ function GetProcess ([string] $OrdinateurCible, [string] $NomProcessus)
DEBUG: 6+ if (GetProcess(\&quot;d0036\&quot;,\&quot;Explorer\&quot;«»))
DEBUG: ! CALL function 'GetProcess' (defined in file 'C:.ps1')
DEBUG: 3+ return ([System.Diagnostics.Process]::GetProcesses($OrdinateurCible) | Where-Object $_.Name -eq $NomProcessus) -ne $null
DEBUG: ! CALL method 'static System.Diagnostics.Process[] GetProcesses(String machineName)'
DEBUG: 2+ if ($ErrorView -ne \&quot;CategoryView\&quot;«»)
DEBUG: 3+ $myinv = $_.InvocationInfo
DEBUG: ! SET $myinv = 'System.Management.Automation.InvocationInfo'.
DEBUG: 4+ switch -regex ($myinv.MyCommand.CommandType)
DEBUG: 24+ if ($myinv.MyCommand.Name)
DEBUG: 2+ if ($_.InvocationInfo)
DEBUG: 3+ $posmsg = $_.InvocationInfo.PositionMessage
DEBUG: ! SET $posmsg = 'Au niveau de C:.ps1 : 3 Caractère : 52...'.
DEBUG: 7+ if ($ErrorView -eq \&quot;CategoryView\&quot;«»)
DEBUG: 11+ $_.Exception.Message + $posmsg
Exception lors de l'appel de « GetProcesses » avec « 1 » argument(s) : « Couldn't connect to remote mach
ine. »
Au niveau de C:.ps1 : 3 Caractère : 52
+ return ([System.Diagnostics.Process]::GetProcesses( &lt;&lt;&lt;&lt; $OrdinateurCible) | Where-Object $_.Name -e
q $NomProcessus
DEBUG: 9+ Write-Host \&quot;La session est fermé\&quot;
La session est fermé[/code:1]

Robin Aleman,
Apprenti au CHU-Montpellier
Débutant PowerShell

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

Plus d'informations
il y a 15 ans 11 mois #2111 par Laurent Dardenne
Salut,
oui j'ai encore un soucis avec la syntaxe des appels de fonction :P
[code:1]
if (GetProcess \&quot;d0036\&quot; \&quot;Explorer\&quot;«»)
{Write-Host \&quot;La session est ouverte\&quot; }
else
{ Write-Host \&quot;La session est fermée\&quot; }
[/code:1]

Quant à ce pb je n'ai pas compris :

Il est censé exécuter la fonction.

Jusque là pas de problème.

Cependant, si je re-exécute la fonction dans la même Instance PowerShell, il ne re-exécute pas le contenu de la fonction.

Tu parles de portée ??
Vérifie dans le provider de functions si elle est bien présente.
[code:1]Dir function:getpro*[/code:1]

Tutoriels PowerShell

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

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