Estou procurando um cmdlet do PowerShell que possa fornecer funcionalidade semelhante ao aplicativo Linux Top. Algo que é atualizado em um determinado intervalo e exibe a lista de processos com CPU% util.
Eu vi scripts que listam a utilização da CPU% em um loop, mas algo como top seria muito mais útil, pois configuramos o acesso SSH / Powershell para gerenciamento (ainda prefiro um shell de massa!)
Respostas:
Este é um revestimento simples que também manterá os rótulos na parte superior.
Isso funciona porque a formatação da tabela sem nenhum parâmetro apenas desenha a tabela padrão. O tamanho automático é usado para ajustar automaticamente a largura da coluna para que todos os dados possam caber na tela.
Aqui está um detalhamento dos comandos abreviados usados
fonte
CPU
inps
é o número de segundos de uso total, não% da CPU. Portanto, isso não é tão útil.Não sei nada sobre isso na forma de cmdlet único, mas, como você diz, é fácil escrever scripts para emular o top.
fonte
Uma solução semelhante às outras, mas usando Get-Counter em vez de Get-Process.
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}
Saída de amostra:
Encontrei a maioria das outras soluções aqui usando o relatório get-process, o tempo total da CPU desde o início do processo. Isso não foi útil no meu servidor, que permanece ativo 24 horas por dia, 7 dias por semana, onde o resultado principal era sempre justo
svchost
esystem
em milhões de segundos. Umtop
equivalente verdadeiro ou um Gerenciador de tarefas forneceria uma captura instantânea do uso da CPU gravado recentemente em um período fixo e o Get-Counter fornece isso. Como esta postagem de superusuário ainda é o principal resultado do Google para "powershell top", achei que vale a pena contribuir com essa alternativa.Meu comando é baseado no exemplo 13 dos documentos do Get-Counter: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Diagnostics/Get-Counter .
Aqui está um detalhamento do one-liner para que você possa modificá-lo mais facilmente de acordo com suas necessidades:
While(1) {
apenas dá laçosget-counter '\Process(*)\% Processor Time'
seleciona os dados da CPU%. Esse comando parece levar uma quantidade significativa de tempo para retornar, portanto, não é necessáriosleep
cls
claro para a nova tabelasort -des CookedValue
CookedValue é o campo em que somos testados, classificar para colocar o maior no toposelect -f 15
exibir primeiro 15ft -a
exibir na tabela formatadafonte
Get-Counter
fornece a CPU "instantânea", em vez do tempo acumulado da CPUps
. Melhor formatação :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
Fornece os títulos legais no topo com todas as atualizações sem a necessidade de limpar o console inteiro.
fonte
Não conheço um cmdlet do PowerShell que ofereça a funcionalidade. Há um comando externo de freeware que faz sobre o que você deseja. Olhe de Mark Russinovich pslist da suíte Sysinternals. O Pslist fornece uma lista de processos em execução em uma exibição configurável. "pslist -s" fornece o tipo de atualização contínua desejada, com uma taxa de atualização padrão de uma vez por segundo.
Prefiro usar o GUI Process Explorer de Mark, mas o pslist é útil para sessões de console.
A home page da Sysinternals está aqui: http://technet.microsoft.com/en-us/sysinternals
Dennis
fonte
Esta é apenas uma maneira um pouco mais agradável, pois você sempre vê os títulos no topo
fonte
Além disso, quero ressaltar que, se você deseja um ambiente Linux para Windows, pode usar o Cygwin. Traz o ambiente Linux para o Windows. Você pode usar quase todos os comandos. Não tenho certeza de como isso é útil para você.
http://www.cygwin.com/
fonte
Isso também pode fazer o truque:
A função depende das
Get-Counter
amostras e produzirá oProcessId,ProcessName,ProcessorUsage
eWorkingSet
. Esta amostra contrária poderia ainda ser melhorado para incluirUser
,CommandLine
na saída, mas eu não ter trabalhado fora ainda uma maneira performance para fazê-lo.fonte
Esse comentário de Mark deve receber mais recomendações, porque faz quase exatamente qual era a pergunta e funciona:
(link para comentar: https://superuser.com/a/770455/989044 )
Você deve criar um módulo simples para ele e hospedar no github ou fornecer choco. Eu acho que deveria ser um módulo padrão em primeiro lugar, porque é muito pesquisado no google e existem todos os tipos de soluções alternativas, mas nenhuma delas é tão elegante e próxima ao comando top do linux.
Desculpe por publicá-lo desta forma, mas por causa das regras aqui contidas, é impossível comentar ou fazer uma anotação sem 50 karma ou mais.
fonte
Para executar o top diretamente do cmd, você precisará criar o arquivo% WINDIR% \ top.bat com este código:
fonte
Se você deseja filtrar por processo, use findstr
fonte
Convém iniciar o monitor de recursos do powershell com:
Você sempre pode fechar o aplicativo com Alt + F4 e isso deve mudar o foco novamente para a janela do PowerShell.
fonte
Você pode tentar o htop-alternative para windows - NTop
Opções de linha de comando :
Comandos interativos:
Comandos do Vi :
Os binários pré-compilados podem ser baixados aqui
fonte
Salve o seguinte em um arquivo chamado
mytop.ps1
em uma pasta que esteja na suaPATH
variável de ambiente. Em seguida, use um dos seguintes itens em qualquer console do PowerShell:mytop
- para usar a classificação padrão na coluna 'Memória' e mostrar as 30 primeiras linhas.mytop CPU 50
- para classificar pela coluna 'CPU' e mostrar as 50 primeiras linhas.While(1) {$p = myTop Memory 50; cls; $p}
- para atualizar a cada segundo.mytop.ps1
conteúdo:Exemplo de saída:
Crédito adicional para:
fonte
Outra coisa a se olhar é:
https://docs.microsoft.com/en-us/sysinternals/downloads/process-utilities
Existe uma ferramenta de linha de comando para despejar todos os processos (e, é claro, Process Monitor ou Process Explorer).
fonte
Use o comando abaixo: ele fornecerá as 10 principais utilizações da CPU e a saída será atualizada a cada 5 segundos
while (1) {ps | CPU de objeto de classificação - propriedade - descendente | selecione -Primeiro 10; a saída do host de gravação "será atualizada em 5 segundos
n
n Identifica o (s) ID (s) de CPU (s) de CPU (s) NPM (K) PM (K) WS (K) Id SI ProcessName"; sono - segundos 5}fonte