Ir ao conteúdo

Bat Comando WMIC no PowerShell não retornado o esperado


Ir à solução Resolvido por rafael holanda,

Posts recomendados

Postado

Olá, estou fazendo um comando para pegar as informações das maquinas na rede usando o Power Shell mas estou tendo dificuldades na filtragem dessas informações, vou deixar o código resumido a baixo para vocês darem uma olhada e ver o que eu estou fazendo errado.

$cpu = get-wmiobject -class win32_processor
$codecpu = $cpu | 
	select @{n='CPU' ;e={"0:n0}" -f ($codecpu.name)}}
$codecpu
"$codecpu"| out-file -filepath C:\test_001.html

No código a cima estou pegando as informações do processador usando a classe win32_processor e jogando a informação para uma variável, onde eu faço uma filtragem para ele me retornar formatado em html o nome da CPU, mas quando rodo o script ele só me retorna a primeira linha da tabela, a CPU e o valor dela ele não mostra.

Postado

Interessante, infelizmente meus conhecimentos em powershell ainda não são bons o suficiente para te ajudar mais qual é o resultado esperado talvez eu posso te ajudar em fazer em batch (.bat).

Postado

Do computador onde você roda o script ou de todos os computadores da rede de uma vez?

Seria algo assim?

 

Modelo: Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz

Frequência: 3401 MHZ

 

Postado

Não importa, se eu rodar na rede ou no computador local ele me retorna vazio, usando esse código. Agora se eu rodar esse outro ele me retorna o esperado.

Get-WMIObject  -ComputerName $no Win32_LogicalDisk -credential $mysecurecreds|
 
	where{($_.DriveType -eq 3)}|
	#seleciona os atributos a mostrar e faz a devida formatação
	select @{n='NO' ;e={"{0:n0}" -f ($no)}},
	@{n='Drive' ;e={"{0:n0}" -f ($_.name)}},
	@{n='Capacidade (Gb)' ;e={"{0:n2}" -f ($_.size/1gb)}},
	@{n='Espaço Livre (Gb)';e={"{0:n2}" -f ($_.freespace/1gb)}},
	@{n='Percentagem Livre';e={"{0:n2}%" -f ($_.freespace/$_.size*100)}} | `
		#Exporta os dados em HTML para um ficheiro
		ConvertTo-Html | `
			#Formata o nome do ficheiro
			Out-File ("C:\AnaliseDisco.html" -f $no`
				,(Get-Date -Format "ddMMyyyy"))

Se você abrir o shell e rodar esse código ele vai te retornar as informações do HD.

adicionado 9 minutos depois
39 minutos atrás, ricardo_br disse:

Do computador onde você roda o script ou de todos os computadores da rede de uma vez?

Seria algo assim?

 

Modelo: Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz

Frequência: 3401 MHZ

 

O que era para ele retornar era, "Name : Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz", que é o valor da variável Name que eu estou querendo, mas acho que deve ser na hora de filtrar as informações que eu joguei na variável, pois quando eu coloco para imprimir a variárel ela imprime os valores certos.

Postado

Veja se é algo assim só que você tem que salvar o arquivo com extensão .bat:

 

@echo off
chcp 1252 > NUl
for /f "Delims=" %%a in ('"wmic cpu get Name,MaxClockSpeed,NumberofCores /format:list"') do for /f  "tokens=1,2 delims==" %%b in ("%%a") do (
if /i "%%b"=="Name" set Processador=%%c
if /i "%%b"=="MaxClockSpeed" set Frequencia=%%c
if /i "%%b"=="NumberofCores" set núcleos=%%c
)
>>cpu.html echo %computername%: Processador: %Processador% - Frequência: %Frequencia% - Núcleos: %núcleos%

 

Ele cria um arquivo chamado CPU.html que no meu caso retorna algo assim:

nCLgg5m.jpg

 

 

adicionado 17 minutos depois

Como forma alternativa:

@echo off
chcp 1252 > NUl
for /f "Delims=" %%a in ('"wmic cpu get Name,MaxClockSpeed,NumberofCores /format:list"') do for /f  "tokens=1,2 delims==" %%b in ("%%a") do (
if /i "%%b"=="Name" set Processador=%%c
if /i "%%b"=="MaxClockSpeed" set Frequencia=%%c
if /i "%%b"=="NumberofCores" set núcleos=%%c
)
>>cpu.html echo Nome do Computador: %Computername% ^<br^>
>>cpu.html echo Processador: %Processador% ^<br^>
>>cpu.html echo Frequência: %Frequencia% ^<br^>
>>cpu.html echo Núcleos: %núcleos% ^<br^>

 

Ficaria assim:

Zhh5AKw.jpg

Postado

Acho que se eu explicar o que eu estou querendo fazer é mais fácil de entender. Estou construindo um código para pegar as informações (memória, processador, hd, rede,etc), das maquinas na rede, e incluir todas as informações de uma maquina em um arquivo HTML, estou pegando as informações da classe, tipo processador onde ele vai me retornar mais de uma informação que eu necessito, e colocando em uma variável, se eu imprimir esse variável na tela do shell ele me retorna as informações corretas, mas quando eu tento filtrar as informações da variável ela não mostra, provavelmente eu esteja fazendo a filtragem de modo errado.
Gostei da forma como você fez @ricardo_br, quebra  o meu galho até conseguir fazer o outro código funcionar, vou pegar as informações dessas classes no WMIC, win32_processor, win32_physicalmemory, win32_diskdrive, win32_computersystem, win32_baseboard, win32_networkadapterconfiguration, usando o código que você me mandou eu consigo pegar as outras classes de uma vez só e imprimir no mesmo arquivo? Tenho que fazer um for para cada classe e depois posso imprimir todas as informações de uma vez? Outra coisa, usando o WMIC na rede para eu conseguir pegar as informações das máquinas eu tinha que usar usuário e senha quando chamava as informações, usando esse método ele vai me pedir também usuário e senha ou vai passar direto? 

Postado

No caso você quer criar um HTML para cada PC ou colocar as informações de todos em 1 html? Você tem uma lista com os nomes de todos os computadores da rede ou sabe o IP de cada um?

Postado

Eu fiz algumas modificações para incluir todas as classes que você falou. Ai ele salva tipo assim: NomeDoComputador.html e dentro tem todas as classes. Se dentro das classes você só quer algumas das informações você poderia usar os campos especificos por exemplo para pegar apenas nome, Frequencia e número de núcleos:

 

wmic path win32_processor get Name,MaxClockSpeed,NumberofCores

 

 

@echo off
chcp 1252 > NUl
if exist "%Computername%.html" del /q /a /f "%Computername%.html"
echo Nome do Computador: %Computername% ^<br^>>>"%computername%.html"
for /f "Delims=" %%a in ('"wmic path win32_processor get /format:list"') do echo/%%a ^<br^>>>"%computername%.html"
for /f "Delims=" %%a in ('"wmic path win32_physicalmemory get /format:list"') do echo/%%a ^<br^>>>"%computername%.html"
for /f "Delims=" %%a in ('"wmic path win32_computersystem get /format:list"') do echo/%%a ^<br^>>>"%computername%.html"
for /f "Delims=" %%a in ('"wmic path win32_diskdrive get /format:list"') do echo/%%a ^<br^>>>"%computername%.html"
for /f "Delims=" %%a in ('"wmic path win32_baseboard get /format:list"') do echo/%%a ^<br^>>>"%computername%.html"
for /f "Delims=" %%a in ('"wmic path win32_networkadapterconfiguration get /format:list"') do echo/%%a ^<br^>>>"%computername%.html"

 

Postado

Isso irá me ajudar muito, estou colocando só para pegar as informações que eu quero, mas como eu faço para usar o comando nas maquinas da redes? Colocando uma lista de ips e colocando o usuário e senha?

Postado

Ficaria algo assim:

 

wmic /Node:"NomeDoComputadorRemoto" /user:SeuUsuario\Domínio /password:SuaSenha path win32_networkadapterconfiguration get

 

Mais tarde explico melhor porque vou fazer uns testes aqui usando meu laptop e meu PC....

  • Solução
Postado
Em 03/10/2020 às 12:39, ricardo_br disse:

Ficaria algo assim:

 


wmic /Node:"NomeDoComputadorRemoto" /user:SeuUsuario\Domínio /password:SuaSenha path win32_networkadapterconfiguration get

 

Mais tarde explico melhor porque vou fazer uns testes aqui usando meu laptop e meu PC....

Sim, fica que nem eu fazia antes.

adicionado 1 minuto depois
16 horas atrás, ricardo_br disse:

Olá amigo, já fiz os testes. Coloquei um vídeo no youtube explicando e estou deixando os arquivos como anexo

 

Vídeo

 

PegarInfoRede.zip

Muito obrigado @ricardo_br você me ajudou muito, o código ficou muito melhor do que eu esperava, e o vídeo ficou bem didático, obrigado pela ajuda.

  • Curtir 1

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...