2014-06-27 6 views
25
Get-Service *sql* | sort DisplayName | out-file c:/servicelist.txt 

Ho uno script PowerShell a una riga per estrarre l'elenco di tutti i servizi in esecuzione sul mio computer locale, ora, oltre a visualizzare "Stato", " Nome" e 'DisplayName' voglio anche visualizzare 'Percorso eseguibile'Come posso estrarre "Path to executable" di tutti i servizi con PowerShell

+0

O anche semplicemente "servizio wmic get PathName'. Funziona anche su prompt dei comandi. – nawfal

risposta

35

Penso che sarà necessario ricorrere a WMI:

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

Aggiornamento Se si desidera eseguire in modo me manipolazione sui dati selezionati, è possibile utilizzare le proprietà calcolate come descritto here.

Per esempio, se si voleva solo il testo tra virgolette per il percorso, si potrebbe dividere in virgolette doppie e prendere l'elemento dell'array 1:

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

Grazie, ma con il "PathName", non ottengo il percorso completo invece ottengo qualcosa come 'C: \ Programmi (x86) \ Microsoft SQL S ...' 'E: \ apps \ MySQL \ MySQL Server 5.0 \ bin \ mys ... ' dopo il numero di caratteri che il percorso tronca, esiste un modo per ottenere il percorso completo? –

+0

Sembra che qualcosa sia stato perso dal tuo commento, ho intenzione di indovinare che lo hai visualizzato sullo schermo e il percorso viene troncato. Prova a collegarlo tramite Format-List per vedere il percorso completo. –

+0

Grazie, ho provato ** Format-List ** e funziona bene. Posso troncare parte del percorso dopo .exe? per esempio '" C: \ Programmi (x86) \ Microsoft SQL Server \ MSSQL.3 \ MSSQL \ Binn \ sqlservr.exe "-sSQLEXPRESS' Non ho bisogno della parte di percorso dopo .exe, I bisogno di qualcosa di simile '" C: \ Programmi (x86) \ Microsoft SQL Server \ MSSQL.3 \ MSSQL \ Binn \ sqlservr.exe "' Rimuovere le virgolette dovrebbe essere ancora meglio –

4

Una variante sul WMI query che può essere più veloce (I solo dovuto fare questo per un client SCCM)

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

L'altro trucco è quello di trappola per i molteplici risultati SQL se si desidera che i nomi di percorso senza le virgolette doppie (in modo da poter azione su di loro)

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

Il grande vantaggio dell'utilizzo di -query nello get-wmiobject (o get-ciminstance) è la velocità di elaborazione. L'esempio precedente ottiene una lista completa e quindi filtra, mentre quest'ultima cattura una lista molto diretta.

Solo l'aggiunta di due centesimi :)

Acclamazioni tutti! Sean The Energized Tech

+0

E una variante sul tuo ma usando -Filter invece di -Query. Mi aspetto che sia molto simile sotto il cofano, ma potrebbe essere una frazione meno digitante :-) 'Get-WmiObject win32_service -Filter 'Nome come"% SQL% "'' –

Problemi correlati