TUTOS.EU

Lister les services d'une machine Windows en Powershell

Pour simplement lister les services avec un tri sur le nom

Get-Service | select Name, Status, DisplayName | sort-object -property Name
Lien vers le fichier : cliquez ici

Lister les services avec un filtre sur le nom

Get-Service | Where-Object {$_.DisplayName -match "nomrecherche"} | select Name, Status, DisplayName | sort-object -property Name
Lien vers le fichier : cliquez ici

Lister les services sur une machine distante avec un filtre sur le nom

Get-Service -ComputerName NomMachineDistante | Where-Object {$_.DisplayName -match "nomrecherche"} | select Name, Status, DisplayName | sort-object -property Name
Lien vers le fichier : cliquez ici

Lister les services sur une machine distante avec un filtre sur le nom et les services qui sont en running

Get-Service -ComputerName NomMachineDistante | Where-Object {($_.DisplayName -match "nomrecherche") -and ($_.status -eq "Running")} | select Name, Status, DisplayName | sort-object -property Name
Lien vers le fichier : cliquez ici

Lister les services avec une sortie sur interface graphique

Get-Service | select Name, Status, DisplayName | sort-object -property Name | Out-GridView
Lien vers le fichier : cliquez ici

On peut aussi faire appel à WMI. L'avantage c'est qu'on a alors accès au champ Pathname, cad l'emplacement de l'exe du service.

Ici on affiche des infos sur tous les services qui ont le mot 'ser' dans le displayname

Get-WmiObject win32_service | ?{$_.DisplayName -like '*ser*'} | select Name, DisplayName, Pathname, State, StartMode, StartName | Format-Table
Lien vers le fichier : cliquez ici

Pour stopper un service par rapport à son DisplayName

Get-Service | Where-Object {$_.DisplayName -match "nomrecherche"} | Stop-Service -Force
Lien vers le fichier : cliquez ici

Il arrive qu'on n'arrive pas à arrêter un service. Dans ce cas il faut tuer le processus qui est derrière.
La technique ci-dessous c'est dans un premier temps de trouver l'emplacement de l'exe pour ensuite tuer son processus.

Là première étape ici affiche l'emplacement de l'exe puis son processus.

Pour l'exemple ici on cherche netlogon

$MesServices = Get-WmiObject win32_service | ?{$_.DisplayName -like '*netlogon*'} | select Name, DisplayName, Pathname, State, StartMode, StartName
foreach ($UnService in $MesServices){
	$MonPath = $UnService.Pathname
	$MonPath = $MonPath.substring(0,$MonPath.length -1)
	$MonPath = $MonPath.substring(1)
	Write-host $MonPath
	
	get-process | select ProcessName, Id, CPU, Path | Where {$_.Path -like "*$MonPath*"} | select ProcessName, Id, CPU, Path
}
Lien vers le fichier : cliquez ici

Si vous êtes satisfait du résultat, le script ci-dessous est le même à part qu'il tue le processus.
Attention ici comme c'est le processus netlogon qui est pris en exemple, vous allez avoir de petits soucis derrière ... donc jouez avec un autre service !

$MesServices = Get-WmiObject win32_service | ?{$_.DisplayName -like '*netlogon*'} | select Name, DisplayName, Pathname, State, StartMode, StartName
foreach ($UnService in $MesServices){
	$MonPath = $UnService.Pathname
	$MonPath = $MonPath.substring(0,$MonPath.length -1)
	$MonPath = $MonPath.substring(1)
	Write-host $MonPath
	
	get-process | select ProcessName, Id, CPU, Path | Where {$_.Path -like "*$MonPath*"} | Stop-Process -Force
}
Lien vers le fichier : cliquez ici

Article(s) suivant(s)