Informações sobre o computador: simples e rápido



Frequentemente, você precisa obter informações rápida, resumida, mas informativa, sobre um computador ou laptop fixo, sem software adicional e sem "abrir a tampa".

Isso pode ser implementado, por exemplo, usando as ferramentas de linha de comando do Windows ou PowerShell.
CMD - funcionalidade testada pelo tempo que está em qualquer versão do Windows.
Além disso, para tarefas administrativas simples, o cmd é mais comum de usar e em algum lugar mais conveniente.

Qual é o melhor - CMD ou PowerShell? Não estou pronto para responder inequivocamente a esta pergunta.
No entanto, nada nos impede de usar os dois, tudo depende da tarefa.

Não coletaremos todas as informações sobre o PC - para isso, existem muitos softwares especializados!


Implementação usando CMD.


Coletaremos informações usando as variáveis ​​do ambiente Windows e a execução de scripts WMI.

Para exibir todas as variáveis ​​de ambiente no Windows e seus valores, use o comando set.

Use o comando WMIC para obter informações sobre o hardware e o sistema, gerenciar processos e seus componentes e alterar as configurações usando os recursos do Windows Management Instrumentation (Windows Management Instrumentation ou WMI).

Você pode obter uma dica sobre como trabalhar com o utilitário wmic.exe usando o comando:
  • wmic /? - exibir ajuda geral.
  • wmic /?: BREVE - exibe uma breve ajuda.
  • wmic /?: FULL - exibe ajuda completa.


Nós vamos usar:
  • BASEBOARD (gerenciamento da placa-mãe);
  • SISTEMA DE COMPUTADOR (controle de computador);
  • CPU (controle de CPU);
  • DISKDRIVE (gerenciamento de disco físico);
  • MEMORYCHIP (informações do chip de memória).


O script contém muitos loops com FOR.
Um recurso distinto do FOR / F é a capacidade de trabalhar com tokens, bem como o suporte a palavras-chave adicionais:
  • pular (pular um certo número de linhas processadas desde o início do arquivo);
  • delims (especifique um delimitador (es) diferente (s), por padrão, um espaço e um caractere de tabulação);
  • tokens (o número de tokens (substrings) recebidos no corpo do loop e os limites de quebra por separador). Você também pode definir um número de token específico que cairá na primeira variável de loop;
  • usebackq (alterando as regras para o uso de aspas dentro de IN (...)).


Abaixo está um script.
@echo off
:    
set fname=pcinfo.txt
: 
Echo pcname: %computername% >>%fname%
:IP-    
FOR /F "usebackq tokens=2 delims=[]" %%i IN (`ping %Computername% -n 1 -4`) DO if not "%%i"=="" Set ip=%%i
Echo IP %computername%: %ip% >>%fname%
:  
Echo username: %username%  >>%fname%
: 
set cmd=wmic computersystem get model
for /f "skip=1 delims=" %%Z in ('%cmd%') do (
    set _pn=%%Z
	GOTO BREAK1
)
:BREAK1
echo CS Model: %_pn% >>%fname%
:
SETLOCAL ENABLEDELAYEDEXPANSION
set mmr=0
for /f "skip=1 delims=" %%i in ('wmic cpu get name') do (
for /f "tokens=1-2 delims=" %%A in ("%%i") do (
set CPULbl=%%A
set /a mmr=!mmr!+1
echo CPU !mmr!: !CPULbl! >>%fname%
))
: 
set cmd=wmic baseboard get product
for /f "skip=1 delims=" %%Z in ('%cmd%') do (
    set _mb=%%Z
    GOTO BREAK2
)
:BREAK2
echo MB: %_mb% >>%fname%
: 
SETLOCAL ENABLEDELAYEDEXPANSION
set mmr=0
for /f "skip=1 delims=" %%i in ('WMIC MemoryChip get BankLabel^,DeviceLocator^,PartNumber^,Speed^,Capacity') do (
for /f "tokens=1-5 delims=" %%A in ("%%i") do (
set BnkLbl=%%A
set /a mmr=!mmr!+1
echo Memory !mmr!: !BnkLbl! >>%fname%
wmic MEMORYCHIP get banklabel, partnumber, capacity, speed,  manufacturer
))
:
SETLOCAL ENABLEDELAYEDEXPANSION
set mmr=0
for /f "skip=1 delims=" %%i in ('wmic diskdrive get model^,size') do (
for /f "tokens=1-2 delims=" %%A in ("%%i") do (
set HDDLbl=%%A
set /a mmr=!mmr!+1
echo DISK !mmr!: !HDDLbl! >>%fname%
))


Implementação com o PowerShell.


No PowerShell, antes de executar o script, você precisa executar um comando que permita a execução de scripts não assinados para a sessão atual do shell:
Set-ExecutionPolicy RemoteSigned -Scope Process

As informações serão coletadas usando principalmente o win32 Get-WmiObject -Class, tudo é simples, trabalhe com loops.

Nós vamos usar:
  • Get-WmiObject -Class win32_processor;
  • Get-WmiObject -Class win32_baseboard;
  • Get-WmiObject Win32_PhysicalMemory;
  • Get-PhysicalDisk;
  • Get-WmiObject -Class Win32_ComputerSystem;
  • Get-WmiObject Win32_NetworkAdapter;
  • Win32_NetworkAdapterConfiguration.


Existem pequenas dificuldades na determinação do endereço IP da placa de rede ativa. Para fazer isso, usamos o filtro NetConnectionStatus - “2”, depois de pegar as informações de endereço mac da classe Win32_NetworkAdapter e o endereço IP da classe Win32_NetworkAdapterConfiguration e combiná-lo em uma solicitação:
PS C:\Users\admin> Get-WmiObject Win32_NetworkAdapter -Filter 'NetConnectionStatus=2'
ServiceName      : Qcamain10x64
MACAddress       : 58:00:E3:7D:87:3F
AdapterType      : Ethernet 802.3
DeviceID         : 1
Name             : Qualcomm Atheros QCA61x4A Wireless Network Adapter
NetworkAddresses :
Speed            : 144400000

Para obter parâmetros de rede para o endereço MAC da placa de rede ativa, lemos adicionalmente Win32_NetworkAdapterConfiguration.

Abaixo está um script.
#    
$fname = "pcinfo.txt"
$CPU = Get-WmiObject  -Class win32_processor
$MB = Get-WmiObject  -Class win32_baseboard
$MEM = Get-WmiObject Win32_PhysicalMemory
$DD = Get-PhysicalDisk
$pcn = Get-WmiObject -Class Win32_ComputerSystem

# 
"pcname:	"+$pcn.Name | Out-File -FilePath $fname -Append -Encoding Default
#IP-    
Get-WmiObject Win32_NetworkAdapter -Filter 'NetConnectionStatus=2' |
ForEach-Object {
$pcip = 1 | Select-Object IP
$config = $_.GetRelated('Win32_NetworkAdapterConfiguration') 
$pcip.IP = $config | Select-Object -expand IPAddress
$pcip
}
foreach($aip in $pcip) {
"IP:	"+$aip.IP | Out-File -FilePath $fname -Append -Encoding Default
}
#  
"username:	"+$pcn.PrimaryOwnerName | Out-File -FilePath $fname -Append -Encoding Default
# 
"CS Model:	"+$pcn.Model | Out-File -FilePath $fname -Append -Encoding Default
#
$num = 0
foreach($processor in $CPU) {
$num = $num+1
"CPU "+$num+":	"+$processor.Name | Out-File -FilePath $fname -Append -Encoding Default
}
# 
"MB:	"+$MB.Product | Out-File -FilePath $fname -Append -Encoding Default
# 
$num = 0
foreach($memory in $MEM) {
$num = $num+1
"MEMORY "+$num+":	"+$memory.PartNumber+"	"+$memory.Capacity+"	"+$memory.Speed | Out-File -FilePath $fname -Append -Encoding Default
}
#
$num = 0
foreach($disk in $DD) {
$num = $num+1
"DISK "+$num+":	"+$disk.FriendlyName+"	"+$disk.Size+"	"+$disk.MediaType | Out-File -FilePath $fname -Append -Encoding Default
}

All Articles