Computerinformationen: Einfach und schnell



Sehr oft müssen Sie schnell, kurz, aber informativ Informationen über einen stationären Computer oder Laptop abrufen, ohne zusätzliche Software und ohne „Öffnen der Abdeckung“.

Dies kann beispielsweise mit den Befehlszeilentools von Windows oder PowerShell implementiert werden.
CMD - bewährte Funktionalität für jede Windows-Version.
Darüber hinaus wird cmd für einfache Verwaltungsaufgaben häufiger und an einem bequemeren Ort verwendet.

Was ist besser - CMD oder PowerShell? Ich bin nicht bereit, diese Frage eindeutig zu beantworten.
Nichts hindert uns jedoch daran, beide zu verwenden, alles hängt von der Aufgabe ab.

Wir werden nicht alle Informationen über den PC sammeln - dafür gibt es viele spezielle Software!


Implementierung mit CMD.


Wir werden Informationen mithilfe von Windows-Umgebungsvariablen sammeln und WMI-Skripte ausführen.

Verwenden Sie den Befehl set, um alle Umgebungsvariablen in Windows und ihre Werte anzuzeigen.

Verwenden Sie den Befehl WMIC, um Informationen zu Hardware und System abzurufen, Prozesse und deren Komponenten zu verwalten und Einstellungen mithilfe der Funktionen von Windows Management Instrumentation (Windows Management Instrumentation oder WMI) zu ändern.

Mit dem folgenden Befehl erhalten Sie einen Hinweis zur Arbeit mit dem Dienstprogramm wmic.exe:
  • wmic /? - Allgemeine Hilfe anzeigen.
  • wmic / ?: BRIEF - zeigt eine kurze Hilfe an.
  • wmic / ?: FULL - Vollständige Hilfe anzeigen.


Wir werden verwenden:
  • BASEBOARD (Motherboard-Management);
  • COMPUTERSYSTEM (Computersteuerung);
  • CPU (CPU-Steuerung);
  • DISKDRIVE (physische Festplattenverwaltung);
  • MEMORYCHIP (Speicherchipinformationen).


Das Skript enthält viele Schleifen mit FOR.
Eine Besonderheit von FOR / F ist die Fähigkeit, Token zu verarbeiten, sowie die Unterstützung zusätzlicher Schlüsselwörter:
  • überspringen (Überspringen einer bestimmten Anzahl verarbeiteter Zeilen vom Anfang der Datei);
  • Trennzeichen (geben Sie ein anderes Trennzeichen an, standardmäßig ein Leerzeichen und ein Tabulatorzeichen);
  • Token (die Anzahl der im Schleifenkörper empfangenen Token (Teilzeichenfolgen) und die Aufschlüsselungsgrenzen durch Trennzeichen). Sie können auch eine bestimmte Token-Nummer festlegen, die in die erste Schleifenvariable fällt.
  • usebackq (Ändern der Regeln für die Verwendung von Anführungszeichen in IN (...)).


Unten ist ein Skript.
@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%
))


Implementierung mit PowerShell.


In PowerShell müssen Sie vor dem Ausführen des Skripts einen Befehl ausführen, mit dem nicht signierte Skripts für die aktuelle Shell-Sitzung ausgeführt werden können:
Set-ExecutionPolicy RemoteSigned -Scope Process

Informationen werden hauptsächlich mit Get-WmiObject-Class win32 gesammelt, alles ist einfach, arbeiten mit Schleifen.

Wir werden verwenden:
  • 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.


Es gibt geringfügige Schwierigkeiten beim Bestimmen der IP-Adresse der aktiven Netzwerkkarte. Dazu verwenden wir den NetConnectionStatus-Filter - "2", nachdem wir die Mac-Adressinformationen aus der Win32_NetworkAdapter-Klasse und die IP-Adresse aus der Win32_NetworkAdapterConfiguration-Klasse entnommen und zu einer Anforderung zusammengefasst haben:
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

Um Netzwerkparameter für die MACAddress der aktiven Netzwerkkarte zu erhalten, lesen wir zusätzlich Win32_NetworkAdapterConfiguration.

Unten ist ein Skript.
#    
$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