2009-06-24 6 views
4

EDIT par OP: Ma question présupposait que PowerShell était le meilleur outil pour ce travail. Il y a un moyen plus simple d'atteindre mon objectif. Un ami vient de me parler de: iisapp.vbs. Il affiche exactement les informations dont j'ai besoin sans avoir besoin de PowerShell.Puis-je utiliser PowerShell 1.0 pour lister les processus avec leurs PID et lignes de commande?


Je travaille avec des dizaines de sites Web ASP.NET fonctionnant localement et quand je veux déboguer un site Web particulier nommé, par exemple, je foo.site.com passer par les étapes suivantes:

  1. Exécutez Process Explorer (à partir de SysInternals) et trouvez quel w3wp.exe a été démarré avec foo.site.com sur sa ligne de commande.

  2. Notez l'ID de processus (PID) de ce processus w3wp.exe.

  3. Dans Visual Studio, attachez à cet ID de processus.

Est-il possible d'écrire un script PowerShell qui imprimera les arguments de ligne PID et commande de tous les processus en cours d'exécution w3wp.exe sur mon ordinateur?

Quand je lance get-process w3wp je reçois:

> get-process w3wp 

Handles NPM(K) PM(K)  WS(K) VM(M) CPU(s)  Id ProcessName 
------- ------ -----  ----- ----- ------  -- ----------- 
    688  28 44060  64576 226  2.75 196 w3wp 
    750  26 48328  68936 225  3.38 1640 w3wp 
    989  36 54596  83844 246  4.92 1660 w3wp 
    921  33 54344  80576 270  4.24 5624 w3wp 
    773  27 48808  72448 244  2.75 5992 w3wp 

Aucune commande d'information Ligne :(

Merci

EDIT: Je cherche les arguments de ligne de commande qui ont été adoptées à w3WP

+0

Il existe également un composant logiciel enfichable IIS7 qui ajoute un certain nombre de cmdlets intéressantes pour la gestion des services Internet (IIS). http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-snap-in/ –

Répondre

12

gwmi win32_process -filter "name='w3wp.exe'" | select name,processId,commandLine

Il devrait faire l'affaire. Je trouve bizarre que PowerShell ne fournisse pas d'informations de ligne de commande par défaut. Note: Je l'ai seulement testé dans PowerShell 2.0, mais comme il utilise wmi, il devrait fonctionner dans 1.0.

EDIT: la version finale utilisée par Tim Stewart (pour éviter des problèmes d'affichage, voir le commentaire):
gwmi win32_process -filter "name='powershell.exe'" | format-table -autosize name,processId,commandLine

+0

SuperBloup, ça a marché! J'ai été déçu par la mise en page que PowerShell 1.0 l'a fait. PowerShell a tronqué la ligne de commande même si la sortie n'occupait que la moitié de l'écran. J'ai trouvé que tout rediriger vers ft -autosize m'a permis de voir toute la ligne de commande. Merci! –

+1

Quant à Powershell ne donnant pas nativement des informations de ligne de commande par défaut: http://blogs.msdn.com/oldnewthing/archive/2009/02/23/9440784.aspx – Joey

0

Cela devrait fonctionner.

get-process | Format table Id, Chemin

+0

Robert, merci pour votre réponse. Je m'excuse si ma question n'était pas claire. Je suis à la recherche de la ligne de commande (y compris les arguments) avec laquelle le processus a été démarré. –

+0

Désolé, trop désireux de répondre je suppose. Besoin de lire la question à deux fois avant de poster :) –

2

Mon premier instinct était d'utiliser get-process et regarder la propriété startinfo:

get-process w3wp | select-object id, path, @{Name="Args";Expression = {$_.StartInfo.Arguments}} 

Malheureusement, cela ne fonctionne pas car $ _. StartInfo.Argments est toujours nul. WMI fonctionne, cependant.

get-wmiobject win32_process -filter "name='w3wp.exe'" | select-object processid, commandline 
+0

Brian, merci pour votre réponse. Remplacer: get-wmio [jb] ect avec get-wmio [bj] ect était nécessaire pour que la deuxième commande fonctionne. –

+0

Tim, j'ai corrigé les lettres transposées. Taper trop vite. FWIW dans le cas où il n'était pas clair "gwmi" est un alias standard pour la cmdlet "Get-WmiObject" et "select" est un alias standard pour "Select-Object" –

Questions connexes