web-dev-qa-db-fra.com

Comment puis-je extraire le "Chemin vers l'exécutable" de tous les services avec PowerShell

Get-Service *sql* | sort DisplayName | out-file c:/servicelist.txt

J'ai un script PowerShell d'une ligne pour extraire la liste de tous les services en cours d'exécution sur ma machine locale, maintenant, en plus d'afficher "Status", "Name" et "DisplayName", je veux également afficher "Path to executable"

43
Abilash A

Je pense que vous devrez recourir à WMI:

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, State, PathName

Mise à jour Si vous souhaitez effectuer des manipulations sur les données sélectionnées, vous pouvez utiliser les propriétés calculées comme décrit ici .

Par exemple, si vous vouliez simplement le texte entre guillemets pour le chemin d'accès, vous pouvez diviser les guillemets doubles et prendre l'élément de tableau 1:

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, @{Name="Path"; Expression={$_.PathName.split('"')[1]}} | Format-List
59
David Martin

Une variante de la requête WMI qui peut être plus rapide (je devais juste le faire pour un client SCCM)

$SQLService=(get-wmiobject -Query 'Select * from win32_service where Name like "*SQL*"') | Select-object Name, DisplayName, State, Pathname

L'autre astuce consiste à intercepter les résultats SQL multiples si vous voulez les noms de chemin sans les guillemets doubles (afin que vous puissiez agir sur eux)

$SQLService | Select-Object Name, DisplayName, State, @{Name='PathName';Expression=$_.Pathname.replace('"','')}

Le gros avantage d'utiliser -query dans le get-wmiobject (ou get-ciminstance) est la vitesse de traitement. L'exemple plus ancien obtient une liste complète, puis filtre, tandis que ce dernier récupère une liste très directe.

Il suffit d'ajouter deux cents :)

Bravo à tous! Sean The Energized Tech

4
user7371585

Vous pouvez également utiliser le modèle d'expression régulière et vider le résultat dans un fichier.

Get-WmiObject win32_service | ?{$_.Name -match '^sql'} | select Name, DisplayName, State, PathName >> C:\temp\sqlservices.txt
0
Aidar Gatin