Estoy buscando un cmdlet de PowerShell que pueda proporcionar una funcionalidad similar a la aplicación Linux Top. Algo que se actualiza en un intervalo determinado y muestra la lista de procesos con CPU% util.
He visto scripts que enumeran la utilización de CPU% en un bucle, pero algo como top sería mucho más útil ya que hemos configurado el acceso SSH / Powershell para la administración (¡todavía prefiero un shell de masilla!)
Respuestas:
Este es un revestimiento simple que también mantendrá las etiquetas en la parte superior.
Esto funciona porque formatear la tabla sin ningún parámetro simplemente dibuja la tabla predeterminada. el tamaño automático se usa para ajustar automáticamente el ancho de la columna para que todos los datos puedan caber en la pantalla.
Aquí hay un desglose de los comandos abreviados utilizados
fuente
CPU
inps
es el número de segundos de uso total, no% de CPU. Entonces esto no es tan útil.No sé nada de eso en forma de cmdlet único, pero como usted dice, los scripts son fáciles de escribir para emular top.
fuente
Una solución similar a las otras, pero usando Get-Counter en lugar de Get-Process.
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}
Salida de muestra:
Encontré que la mayoría de las otras soluciones aquí usando get-process informan el tiempo total de la CPU desde el inicio del proceso. Eso no fue útil en mi servidor que permanece activo las 24 horas del día, los 7 días de la semana, donde el mejor resultado siempre fue justo
svchost
ysystem
en millones de segundos. Un verdaderotop
o equivalente del Administrador de tareas proporcionaría una instantánea del uso de la CPU registrado recientemente durante un tiempo fijo y Get-Counter lo proporciona. Dado que esta publicación de Superusuario sigue siendo el principal resultado de Google para "powershell top", pensé que valía la pena contribuir con esta alternativa.Mi comando se basa en el ejemplo 13 de los documentos Get-Counter: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Diagnostics/Get-Counter .
Aquí hay un desglose del one-liner para que pueda modificarlo más fácilmente según sus necesidades:
While(1) {
solo lo repiteget-counter '\Process(*)\% Processor Time'
selecciona la CPU% de datos. Parece que este comando tarda mucho tiempo en volver, por lo que no es necesariosleep
cls
claro para la nueva mesasort -des CookedValue
CookedValue es el campo en el que estamos interesados, para poner el más grande en la parte superiorselect -f 15
mostrar los primeros 15ft -a
mostrar en tabla formateadafuente
Get-Counter
le ofrece la CPU "instantánea", en lugar del tiempo acumulado de CPUps
. Mejor formato :Get-Counter '\Process(*)\% Processor Time' | Select-Object -ExpandProperty countersamples| Select-Object -Property instancename, cookedvalue| ? {$_.instanceName -notmatch "^(idle|_total|system)$"} | Sort-Object -Property cookedvalue -Descending| Select-Object -First 25| ft InstanceName,@{L='CPU';E={($_.Cookedvalue/100/$env:NUMBER_OF_PROCESSORS).toString('P')}} -AutoSize
Proporciona encabezados agradables en la parte superior con cada actualización sin necesidad de borrar toda la consola.
fuente
No conozco un cmdlet de PowerShell que proporcione la funcionalidad. Hay un comando externo gratuito que hace lo que quieres. Mira la pslist de Mark Russinovich de la suite Sysinternals. Pslist proporciona una lista de procesos en ejecución en una vista configurable. "pslist -s" proporciona el tipo de actualización continua que desea, con una frecuencia de actualización predeterminada de una vez por segundo.
Prefiero usar el GUI Process Explorer de Mark, pero pslist es útil para las sesiones de consola.
La página de inicio de Sysinternals está aquí: http://technet.microsoft.com/en-us/sysinternals
Dennis
fuente
Esta es una forma un poco mejor, ya que puedes ver los encabezados en la parte superior cada vez
fuente
Además, quiero señalar que si desea un entorno similar a Linux para Windows, puede usar Cygwin. Trae el entorno Linux a Windows. Puedes usar casi todos los comandos. Sin embargo, no estoy seguro de cuán útil es esto para usted.
http://www.cygwin.com/
fuente
Esto también puede hacer el truco:
La función se basa en las
Get-Counter
muestras y generará elProcessId,ProcessName,ProcessorUsage
yWorkingSet
. Esta muestra de contador podría mejorarse aún más para incluirUser
,CommandLine
en la salida, pero no he resuelto todavía de manera performant para hacerlo.fuente
Este comentario de Mark debería recibir más recomendaciones, porque hace casi exactamente cuál era la pregunta y funciona:
(enlace al comentario: https://superuser.com/a/770455/989044 )
Debería crear un módulo simple para él y alojarlo en github o proporcionarle choco. Creo que debería ser un módulo estándar en primer lugar, porque está muy buscado en Google y hay todo tipo de soluciones, pero ninguna de ellas es tan elegante y cercana al comando superior de Linux.
Perdón por publicarlo así, pero debido a las reglas de strikt aquí es imposible comentar o hacer una nota sin 50 karma más o menos.
fuente
Para ejecutar top directamente desde cmd, deberá crear el archivo% WINDIR% \ top.bat con este código:
fuente
Si desea filtrar por proceso, use findtr
fuente
Es posible que desee iniciar el monitor de recursos desde powershell con:
Siempre puede cerrar la aplicación con Alt + F4 y eso debería cambiar el foco de nuevo a la ventana de PowerShell.
fuente
Puede probar htop-alternative para windows - NTop
Opciones de línea de comando :
Comandos interactivos:
Comandos vi :
Los binarios precompilados se pueden descargar aquí.
fuente
Guarde lo siguiente en un archivo llamado
mytop.ps1
en una carpeta que está en suPATH
variable de entorno. Luego use uno de los siguientes de cualquier consola de PowerShell:mytop
- para utilizar la ordenación predeterminada por la columna 'Memoria' y mostrar las primeras 30 líneas.mytop CPU 50
- para ordenar por la columna 'CPU' y mostrar las primeras 50 líneas.While(1) {$p = myTop Memory 50; cls; $p}
- para que se actualice cada segundo más o menos.mytop.ps1
contenido:Salida de ejemplo:
Crédito adicional a:
fuente
Algo más a tener en cuenta es:
https://docs.microsoft.com/en-us/sysinternals/downloads/process-utilities
Hay una herramienta de línea de comandos para volcar todos los procesos (y, por supuesto, Process Monitor o Process Explorer).
fuente
Use el siguiente comando, le dará la utilización de la CPU de los 10 principales y la salida se actualizará cada 5 segundos
mientras que (1) {ps | Sort-Object -Property cpu -Descending | seleccione -Primero 10; la salida del host de escritura "se actualizará en 5 segundos
n
n Maneja NPM (K) PM (K) WS (K) CPU (s) Id SI ProcessName"; dormir -segundos 5}fuente