Informations informatiques: simples et rapides



Très souvent, vous devez obtenir rapidement, brièvement, mais de manière informative des informations sur un ordinateur fixe ou portable, sans logiciel supplémentaire et sans «ouvrir le couvercle».

Cela peut être implémenté, par exemple, à l'aide des outils de ligne de commande de Windows ou PowerShell.
CMD - fonctionnalité éprouvée dans n'importe quelle version de Windows.
De plus, pour les tâches administratives simples, cmd est plus courant à utiliser et plus pratique.

Quel est le meilleur - CMD ou PowerShell? Je ne suis pas prêt à répondre sans équivoque à cette question.
Cependant, rien ne nous empêche d'utiliser les deux, tout dépend de la tâche.

Nous ne collecterons pas toutes les informations sur le PC - pour cela, il existe de nombreux logiciels spécialisés!


Implémentation à l'aide de CMD.


Nous collecterons des informations en utilisant les variables de l'environnement Windows et l'exécution de scripts WMI.

Pour afficher toutes les variables d'environnement dans Windows et leurs valeurs, utilisez la commande set.

Utilisez la commande WMIC pour obtenir des informations sur le matériel et le système, gérer les processus et leurs composants et modifier les paramètres à l'aide des capacités de Windows Management Instrumentation (Windows Management Instrumentation ou WMI).

Vous pouvez obtenir un indice sur l'utilisation de l'utilitaire wmic.exe par la commande:
  • wmic /? - afficher l'aide générale.
  • wmic /?: BRIEF - affiche une brève aide.
  • wmic /?: FULL - affiche l'aide complète.


Nous utiliserons:
  • BASEBOARD (gestion de la carte mère);
  • SYSTÈME INFORMATIQUE (commande par ordinateur);
  • CPU (CPU control);
  • DISKDRIVE (gestion des disques physiques);
  • MEMORYCHIP (informations sur la puce mémoire).


Le script contient de nombreuses boucles avec FOR.
Une caractéristique distinctive de FOR / F est la possibilité de travailler avec des jetons, ainsi que la prise en charge de mots clés supplémentaires:
  • sauter (sauter un certain nombre de lignes traitées depuis le début du fichier);
  • delims (spécifiez un ou des délimiteurs différents, par défaut, un espace et un caractère de tabulation);
  • jetons (le nombre de jetons (sous-chaînes) reçus dans le corps de la boucle et les limites de claquage par séparateur). Vous pouvez également définir un numéro de jeton spécifique qui tombera dans la première variable de boucle;
  • usebackq (modification des règles d'utilisation des guillemets dans IN (...)).


Voici un 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%
))


Implémentation avec PowerShell.


Dans PowerShell, avant d'exécuter le script, vous devez exécuter une commande qui permet l'exécution de scripts non signés pour la session shell actuelle:
Set-ExecutionPolicy RemoteSigned -Scope Process

Les informations seront collectées en utilisant principalement Get-WmiObject -Class win32, tout est simple, en travaillant avec des boucles.

Nous utiliserons:
  • 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.


Il existe des difficultés mineures pour déterminer l'adresse IP de la carte réseau active. Pour ce faire, nous utilisons le filtre NetConnectionStatus - «2», après avoir pris les informations d'adresse mac de la classe Win32_NetworkAdapter et l'adresse IP de la classe Win32_NetworkAdapterConfiguration et les combiner en une seule demande:
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

Pour obtenir les paramètres réseau pour l'adresse MAC de la carte réseau active, nous lisons également Win32_NetworkAdapterConfiguration.

Voici un 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