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

Plus d'informations
il y a 10 ans 4 mois #21314 par hays
Bonjour,

Je ne sais pas si quelqu'un suit encore se file de discussion ?

Cela me plairait reprendre le script que vous avez commencé pour repérer l’existence d'un processus sur une machine et si ce processus existe le terminer.


je suis un peu novice en powershell mais il faut bien commencer par quelque chose.

$OrdinateurCible = \".\"
$NomProcessus = \"notepad\"
function GetProcess ([string] $OrdinateurCible, [string] $NomProcessus)
{
Return ([System.Diagnostics.Process]::GetProcesses($OrdinateurCible) | Where-Object {$_.Name -eq $NomProcessus}) -ne $null
}
<# ... la première partie m’intéresse car elle renvoi à priori une valeur True mais je n'arrive à rien avec la second #>

if (GetProcess -eq True)
{stop-process $NomProcessus }
else
{ Write-Host \"le proces n'est pas en cours d’exécution\" }

j'ai essayé quelques variante de syntaxe mais j'aimerais savoir comment je dois m'y prendre je vous en serais vraiment reconnaissant.


Cordialement

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

Plus d'informations
il y a 10 ans 4 mois #21315 par xyz
Salut,
tu peux utiliser le cmdlet Get-Process et pour le supprimer WMI (win32_Process ou WinRM).<br><br>Message édité par: Laurent Dardenne, à: 19/01/16 14:40

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 4 mois #21318 par hays
Bonjour,

merci pour ta réponse c'est sympa.

l'idée est de lancer un script qui va se connecter à la machine distante dans un premier temps.

pour cela je vais utiliser cela

$password = ConvertTo-SecureString \&quot;pass\&quot; -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential (\&quot;W2K12R2\administrateur\&quot;, $password )
Enter-PSSession -ComputerName W2K12R2 -Credential $cred

une fois connecté le script doit scruter les processus de la machine distante et filtrer sur \&quot;notepad \&quot; dans mes tests et me dire si le processus existe.

pour cela je souhaite utiliser votre fonction

function GetProcess ([string] $OrdinateurCible, [string] $NomProcessus)
{
Return ([System.Diagnostics.Process]::GetProcesses($OrdinateurCible) | Where-Object {$_.Name -eq $NomProcessus})
}

celle-ci est censé retourner \&quot;true\&quot; ou \&quot;false\&quot;



je creuse un peu par si par mais je n'arrive pas à faire une condition avec un if pour utiliser se qui est retourné par la fonction.

et c'est la que je bute

sinon j'avais trouver cela

#Avec le pipe
Get-Process| Where {$_.ProcessName -eq $NameOfProcess}| Foreach {$_.Kill()}
#Filtre tous les process de nom $NameOfProcess


&lt;# #Sans le pipe
$Process=Get-Process $NameOfProcess -ea SilentlyContinue
if ($Process -ne $Null) {P$.Kill}
&amp;\&quot;$ProcessPath\$NameOfProcess.exe\&quot; #&gt;

mais cela ne fonctionne pas.

je suis dans le flou pourtant ça doit pas être bien compliqué<br><br>Message édité par: farid, à: 19/01/16 13:53

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

Plus d'informations
il y a 10 ans 3 mois #21320 par xyz
Oublie la fonction du premier post.
Pour récupérer un process par son nom :
[code:1]
Notepad
$p=@(get-process -name Notepa[d])
If ($p.Count -eq 0 )
{ \&quot;Pas de process\&quot; }
elseIf ($p.Count -eq 1 )
{ $p[0].Kill() }
else { \&quot;TODO : cas à spécifier\&quot; }
[/code:1]
La syntaxe 'Notepa[d]' est une astuce pour déclencher l'analyse du globbing et ainsi éviter une exception :
[code:1]get-process -name Notepad[/code:1]
Le @() crée un tableau et y insére le résultat de l'appel du cmdlet, si $P.Count est égal à zéro le process n'existe pas.
Ici on remplace false/true par 0 ou 1 ET &gt;

Utiliseras-tu WinRM ?

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 3 mois #21337 par hays
Merci pour votre réponse

effectivement je souhaite utiliser winrm.

La réalité c'est que j'ai un de mes collêgues qui cherche à paramétrer un serveur CHEF chez nous pour les mises à jour de certains logiciel.

l'idée est de lancer le script à partir d'un serveur qui va se connecter à des postes qui ont se logiciel afin que le serveur CHEF lance à son toutt la mise à jour.

Le hic c'est que certain client n'ont pas de domaine, ce qui m'incite à faire ce genre de procédure.

je ne sais pas encore quelle forme mon script devra prendre.

première étape me connecter à la machine à mettre à jour qui sera prête à avoir une connexion via winrm avec ces lignes de code


$password = ConvertTo-SecureString \&quot;pass\&quot; -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential (\&quot;W2K12R2\administrateur\&quot;, $password )
Enter-PSSession -ComputerName W2K12R2 -Credential $cred

sleep 20

&lt;# une fois connecté au shell de la machine distante, votre script entre en jeux#&gt;


$p=@(get-process -name Notepa[d])
If ($p.Count -eq 0 )
{ \&quot;Pas de process\&quot; }
elseIf ($p.Count -eq 1 )
{ $p[0].Kill() }
else { \&quot;TODO : cas à spécifier\&quot; }


&lt;# et je dois trouver un moyen d'avoir un retour pour savoir que l'opération c'est bien effectué par exemple en récupérant le stderr peut-etre ,
pour la suite c'est une copie d'un répertoire je dois pouvoir le faire et supprimé le logiciel déjà en cours sur le poste
#&gt;

$application = Get-WmiObject -Query \&quot;SELECT * FROM Win32_Product WHERE Name LIKE 'logiciel en question'\&quot;
$application.Uninstall()

exit-pssession

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

Plus d'informations
il y a 10 ans 3 mois #21338 par xyz
Pour le retour du code d'erreur c'est toi qui détermine cette situation, tu peux donc créer un objet personnalisé et l’émettre dans le pipeline du job distant (cf. Invoke-Command).
A toi de voir si tu veux juste savoir si le traitement réussi ou pas ou si tu veux le détail des possibles erreurs...

Dans ce contexte le stderr est plutôt le pipeline et ses différents streams (Error,Verbose,etc).

Tu peux utiliser ceci ou t'en inspirer en créant de simples fonctions d'assertion.

Tutoriels PowerShell

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

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