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