Información de la computadora: simple y rápida



Muy a menudo, necesita obtener información rápida, breve pero informativa sobre una computadora o computadora portátil estacionaria, sin software adicional y sin "abrir la cubierta".

Esto se puede implementar, por ejemplo, utilizando las herramientas de línea de comandos de Windows o PowerShell.
CMD: funcionalidad probada en el tiempo que se encuentra en cualquier versión de Windows.
Además, para tareas administrativas simples, cmd es más conveniente de usar y en algún lugar más conveniente.

¿Qué es mejor: CMD o PowerShell? No estoy listo para responder inequívocamente esta pregunta.
Sin embargo, nada nos impide usar ambos, todo depende de la tarea.

No recopilaremos toda la información sobre la PC, ¡para esto hay muchos programas especializados!


Implementación usando CMD.


Recopilaremos información utilizando las variables del entorno de Windows y la ejecución de scripts WMI.

Para mostrar todas las variables de entorno en Windows y sus valores, use el comando set.

Use el comando WMIC para obtener información sobre el hardware y el sistema, administrar procesos y sus componentes, y cambiar la configuración utilizando las capacidades de Instrumental de administración de Windows (Instrumental de administración de Windows o WMI).

Puede obtener una pista sobre cómo trabajar con la utilidad wmic.exe con el comando:
  • wmic /? - Mostrar ayuda general.
  • wmic /?: BREVE - muestra una breve ayuda.
  • wmic /?: FULL - muestra la ayuda completa.


Usaremos:
  • BASEBOARD (gestión de la placa base);
  • SISTEMA INFORMÁTICO (control por computadora);
  • CPU (control de CPU);
  • DISKDRIVE (gestión de disco físico);
  • MEMORYCHIP (información del chip de memoria).


El script contiene muchos bucles con FOR.
Una característica distintiva de FOR / F es la capacidad de trabajar a través de tokens, así como la compatibilidad con palabras clave adicionales:
  • omitir (omitir un cierto número de líneas procesadas desde el comienzo del archivo);
  • delimitadores (especifique un delimitador (es) diferente, por defecto, un espacio y un carácter de tabulación);
  • tokens (el número de tokens (subcadenas) recibidos en el cuerpo del bucle y los límites de desglose por separador). También puede establecer un número de token específico que se incluirá en la primera variable de bucle;
  • usebackq (cambiando las reglas para usar comillas dentro de IN (...)).


Debajo hay un guión.
@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%
))


Implementación con PowerShell.


En PowerShell, antes de ejecutar el script, debe ejecutar un comando que permita la ejecución de scripts sin firmar para la sesión de shell actual:
Set-ExecutionPolicy RemoteSigned -Scope Process

La información se recopilará utilizando principalmente Get-WmiObject -Class win32, todo es simple, funciona con bucles.

Usaremos:
  • 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.


Existen dificultades menores para determinar la dirección IP de la tarjeta de red activa. Para hacer esto, usamos el filtro NetConnectionStatus - "2", después de tomar la información de la dirección mac de la clase Win32_NetworkAdapter y la dirección IP de la clase Win32_NetworkAdapterConfiguration y combinarla en una sola solicitud:
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 obtener los parámetros de red para la dirección MAC de la tarjeta de red activa, también leemos Win32_NetworkAdapterConfiguration.

Debajo hay un guión.
#    
$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