Ir ao conteúdo
  • Cadastre-se

Bat Status do Computador via Power Shell


Posts recomendados

Powershell:
 

Processador:
Get-WmiObject Win32_Processor | Select LoadPercentage | Format-List

Memória
Get-WmiObject Win32_Processor | Measure-Object -Property LoadPercentage -Average | Select Average

 

Prompt de comando:

Processador:

wmic cpu get loadpercentage /value

 

Memoria Livre:

wmic os get freephysicalmemory /value

 

Memória total:

wmic ComputerSystem get TotalPhysicalMemory

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Felipe Bizoli , mas esses comandos retornam isso.

 

O primeiro comando, wmic cpu get loadpercentage /value, já te dá o número em porcentagem mesmo, e com os outros 2 você calcula o percentual da memória usada naquele momento (usada = (1 - freephysicalmemory/TotalPhysicalMemory) * 100).

Link para o comentário
Compartilhar em outros sites

Depois de pesquisar bastante eu descobri que a formula para calcular a porcentagem de memória usada como ela aparece no Gerenciador de Tarefas é:

 

100 - ((Memória Livre / Memória Visível) * 100)

 

Já para pegar a porcentagem de uso do processador seria só pegar o loadpercentage do cpu no wmic porém eu sempre recebo valores diferentes do processador comparando com o que aparece no Gerenciador de tarefas.

 

P2i3Xyw.gif

 

Esse é o arquivo batch que eu usei para fazer os testes:

 

basta copiar para bloco de notas e salvar com extensão *.bat e codificação ANSI:

 

@echo off
chcp 1252 > nul

:Repetir

:: Pega porcentagem de uso Processador:
for /f "skip=1" %%a in ('wmic cpu get loadpercentage') do for /f %%b in ("%%a") do set "PorcentagemUsadaProcessador=%%b"
IF /i "%PorcentagemUsadaProcessador%"=="loadpercentage" set "PorcentagemUsadaProcessador=0"

:: Pega Memovia Visivel
for /f %%a in ('wmic os get totalvisiblememorysize') do for /f %%b in ("%%a") do set MemoriaVisivel=%%b

:: Pega Memoria Live
for /f %%a in ('wmic os get freephysicalmemory') do for /f %%b in ("%%a") do set MemoriaLivre=%%b

:: Foruma para calcular memoria usada:
for /f %%a in ('Powershell 100 - ^(%MemoriaLivre% / %MemoriaVisivel%^) *100') do set PorcentagemMemoriaUsada=%%a

:: Fazendo o arredondamento:
for /f "tokens=1-2 delims=," %%a in ("%PorcentagemMemoriaUsada%") do (
                                                                      set "PorcentagemExata=%PorcentagemMemoriaUsada%"
                                                                      set PorcentagemMemoriaUsada=%%a
                                                                      set Quebrados=%%b
                                                                     )
:: Parece que o Windows não arredonda o valor da memoria para o valor após a virgula
:: IF %Quebrados:~0,1% GEQ 5 set /a PorcentagemMemoriaUsada+=1

cls
chcp 1252 > nul
echo  Processador: %PorcentagemUsadaProcessador%  Memória: %PorcentagemMemoriaUsada% 
timeout /t 1 > nul
goto :Repetir

 

Link para o comentário
Compartilhar em outros sites

Bom dia Ricardo,
tudo bem?
 

Realmente, efetuei alguns testes, e o valor nunca irá bater com o do gerenciador, acredito que, a consulta contem intervalos, por isso, fica diferente.

Editei um PowerShell com esse comando:

Get-WmiObject Win32_OperatingSystem | %{"{0}" -f $_.FreePhysicalMemory/1MB}
Get-WmiObject Win32_OperatingSystem | %{"{0}" -f $_.totalvisiblememorysize/1MB}
Get-WmiObject Win32_Processor | Select-Object -expand LoadPercentage

Irei testar as 2 aplicações, o Bat e o PowerShell, vamos analisar qual dará o retorno perfeito.

Finalizando a aplicação, irei postar para o senhor Analisar.

Obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

Sendo que o valor do processador que aparece no Gerenciador de Tarefas é sempre maior (no meu caso) eu desconfio que isso tem alguma coisa a ver com processadores de vários núcleos, pode ser que loadpercentage só pega de um núcleo e o Gerenciador de Tarefas soma o de todos....

Link para o comentário
Compartilhar em outros sites

Boa tarde Ricardo,

Exato, fui rodar no meu servidor, e os valores não bateram, devido a eu estar com multi processadores/núcleos no caso.
essa parte que estou tentando debugar para descobrir.

Mas, o processo está assim, conforme print, mas ainda não está com a regra de 3 para o percentual exato, estou tratando isso agora. 

 

image.png

Link para o comentário
Compartilhar em outros sites

  • 7 meses depois...

Bom dia, Pessoal
Sou nova na criação de scprits, tive esse mesmo problema e consegui resolver com a ajuda de dois colegas de trabalho. Os códigos que postarei, verificam os 15 maiores processos e mostram em porcentagem.

Espero que ajude de alguma forma.

 

#CPU

write-host "Mostra processos de CPU em porcentagem"

$Result = Get-Counter "\Process(*)\% Processor Time" -ErrorAction SilentlyContinue `
    | Select-Object -ExpandProperty CounterSamples `
    | Where-Object {$_.Status -eq 0 -and $_.instancename -notin "_total", "idle", "" -and $_.CookedValue/$env:NUMBER_OF_PROCESSORS -gt 0} `
    | Sort-Object CookedValue -Descending `
        | Select-Object @{N="ServerName";E={$env:COMPUTERNAME}},
        @{N="ProcessName";E={
            $friendlyName = $_.InstanceName
            try {
                $procId = [System.Diagnostics.Process]::GetProcessesByName($_.InstanceName)[0].Id
                $proc = Get-WmiObject -Query "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId =$procId"
                $procPath = ($proc | where { $_.ExecutablePath } | select -First 1).ExecutablePath
                $friendlyName = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($procPath).FileDescription
            } catch { }
            $friendlyName
        }},
        @{N="CPU_Percent";E={[System.Math]::Round(($_.CookedValue/$env:NUMBER_OF_PROCESSORS), 2)}},
        @{N="TimeStamp";E={Get-Date -Format 'dd/MM/yyyy HH:mm:ss.fff'}} -First 15

$Result

 

#memória

write-host "Mostra processos de memória em porcentagem"

$RAM=Get-WMIObject Win32_PhysicalMemory | Measure -Property capacity -Sum | %{$_.sum}

Get-WmiObject WIN32_PROCESS | Where-Object { $_.name -inotmatch '_total|idle' } | Sort-Object -Property ws -Descending | Select-Object -first 15 processname, processid, @{Name="Mem Usage(%)";Expression={[math]::round(($_.ws*100)/$RAM,2)}}

 

Get-CPU-Memoria.txt

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!