Informasi Komputer: Sederhana dan Cepat



Cukup sering, Anda perlu secara cepat, singkat, tetapi secara informatif mendapatkan informasi tentang komputer atau laptop yang diam, tanpa perangkat lunak tambahan dan tanpa "membuka penutup".

Ini dapat diimplementasikan, misalnya, menggunakan alat baris perintah Windows atau PowerShell.
CMD - fungsionalitas teruji waktu yang ada di versi Windows mana pun.
Selain itu, untuk tugas administratif yang sederhana, cmd lebih umum digunakan, dan di tempat yang lebih nyaman.

Mana yang lebih baik - CMD atau PowerShell? Saya belum siap menjawab pertanyaan ini dengan tegas.
Namun, tidak ada yang menghalangi kita untuk menggunakan keduanya, semuanya tergantung pada tugas.

Kami tidak akan mengumpulkan semua informasi tentang PC - untuk ini ada banyak perangkat lunak khusus!


Implementasi menggunakan CMD.


Kami akan mengumpulkan informasi menggunakan variabel lingkungan Windows dan pelaksanaan skrip WMI.

Untuk menampilkan semua variabel lingkungan di Windows dan nilainya, gunakan perintah set.

Gunakan perintah WMIC untuk mendapatkan informasi tentang perangkat keras dan sistem, mengelola proses dan komponennya, dan mengubah pengaturan menggunakan kemampuan Instrumentasi Manajemen Windows (Instrumentasi Manajemen Windows atau WMI).

Anda bisa mendapatkan petunjuk tentang cara bekerja dengan utilitas wmic.exe dengan perintah:
  • wmic /? - Menampilkan bantuan umum.
  • wmic /?: SINGKAT - tampilkan bantuan singkat.
  • wmic /?: FULL - tampilkan bantuan penuh.


Kami akan menggunakan:
  • BASEBOARD (manajemen motherboard);
  • COMPUTERSYSTEM (kontrol komputer);
  • CPU (kontrol CPU);
  • DISKDRIVE (manajemen disk fisik);
  • MEMORYCHIP (informasi chip memori).


Script berisi banyak loop dengan FOR.
Fitur khas FOR / F adalah kemampuan untuk bekerja melalui token, serta dukungan untuk kata kunci tambahan:
  • lewati (melewatkan sejumlah baris yang diproses dari awal file);
  • delims (tentukan pembatas yang berbeda, secara default, spasi dan karakter tab);
  • token (jumlah token (substring) yang diterima di badan loop dan batas kerusakan oleh pemisah). Anda juga dapat mengatur nomor token tertentu yang akan jatuh ke dalam variabel loop pertama;
  • usebackq (mengubah aturan untuk menggunakan kutipan di dalam IN (...)).


Di bawah ini adalah skrip.
@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%
))


Implementasi dengan PowerShell.


Di PowerShell, sebelum menjalankan skrip, Anda perlu menjalankan perintah yang memungkinkan eksekusi skrip yang tidak ditandatangani untuk sesi shell saat ini:
Set-ExecutionPolicy RemoteSigned -Scope Process

Informasi akan dikumpulkan menggunakan Get-WmiObject -Class win32, semuanya sederhana, bekerja dengan loop.

Kami akan menggunakan:
  • Dapatkan-WmiObject -Class win32_processor;
  • Dapatkan-WmiObject -Class win32_baseboard;
  • Get-WmiObject Win32_PhysicalMemory;
  • Dapatkan-PhysicalDisk;
  • Get-WmiObject -Class Win32_ComputerSystem;
  • Get-WmiObject Win32_NetworkAdapter;
  • Win32_NetworkAdapterConfiguration.


Ada kesulitan kecil dalam menentukan alamat IP kartu jaringan yang aktif. Untuk melakukan ini, kami menggunakan filter NetConnectionStatus - "2", setelah kami mengambil informasi alamat mac dari kelas Win32_NetworkAdapter dan alamat IP dari kelas Win32_NetworkAdapterConfiguration dan menggabungkannya menjadi satu permintaan:
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

Untuk mendapatkan parameter jaringan untuk MACAddress dari kartu jaringan yang aktif, kami juga membaca Win32_NetworkAdapterConfiguration.

Di bawah ini adalah skrip.
#    
$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