في كثير من الأحيان ، تحتاج إلى الحصول على معلومات سريعة وجيزة ، ولكن بشكل إعلامي عن جهاز كمبيوتر ثابت أو كمبيوتر محمول ، بدون برامج إضافية وبدون "فتح الغطاء".يمكن تنفيذ ذلك ، على سبيل المثال ، باستخدام أدوات سطر الأوامر في Windows أو PowerShell.CMD - وظيفة تم اختبارها بالوقت في أي إصدار من Windows.بالإضافة إلى ذلك ، بالنسبة للمهام الإدارية البسيطة ، يعد أمر cmd أكثر شيوعًا في الاستخدام وأكثر ملاءمة في مكان ما.أيهما أفضل - CMD أو PowerShell؟ لست على استعداد للإجابة على هذا السؤال بشكل لا لبس فيه.ومع ذلك ، لا شيء يمنعنا من استخدام كليهما ، كل هذا يتوقف على المهمة.لن نقوم بجمع جميع المعلومات حول جهاز الكمبيوتر - لذلك هناك العديد من البرامج المتخصصة!التنفيذ باستخدام CMD.
سنقوم بجمع المعلومات باستخدام متغيرات بيئة Windows وتشغيل البرامج النصية لـ WMI.لعرض جميع متغيرات البيئة في Windows وقيمها ، استخدم الأمر set.استخدم أمر WMIC للحصول على معلومات حول الأجهزة والنظام ، وإدارة العمليات ومكوناتها ، وتغيير الإعدادات باستخدام إمكانيات Windows Management Instrumentation (Windows Management Instrumentation أو WMI).يمكنك الحصول على تلميح للعمل باستخدام الأداة المساعدة wmic.exe من خلال الأمر:- wmic /؟ - عرض المساعدة العامة.
- wmic /؟: BRIEF - عرض مساعدة مختصرة.
- wmic /؟: FULL - عرض المساعدة الكاملة.
سوف نستخدم:- BASEBOARD (إدارة اللوحة الأم) ؛
- نظام الكمبيوتر (التحكم بالكمبيوتر) ؛
- وحدة المعالجة المركزية (التحكم في وحدة المعالجة المركزية) ؛
- DISKDRIVE (إدارة القرص الفعلي) ؛
- MEMORYCHIP (معلومات شريحة الذاكرة).
يحتوي البرنامج النصي على العديد من الحلقات مع FOR.السمة المميزة لـ FOR / F هي القدرة على العمل من خلال الرموز المميزة ، بالإضافة إلى دعم الكلمات الرئيسية الإضافية:- تخطي (تخطي عدد معين من الخطوط المعالجة من بداية الملف) ؛
- delims (حدد محددًا (محددات) مختلفة ، بشكل افتراضي ، مسافة وحرف علامة تبويب) ؛
- الرموز المميزة (عدد الرموز المميزة (سلاسل فرعية) المتلقاة في جسم الحلقة وحدود الانهيار بواسطة الفاصل). يمكنك أيضًا تعيين رقم مميز معين يقع في متغير الحلقة الأولى ؛
- usebackq (تغيير قواعد استخدام الاقتباسات داخل IN (...)).
يوجد أدناه برنامج نصي.@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%
))
التنفيذ مع PowerShell.
في PowerShell ، قبل تشغيل البرنامج النصي ، تحتاج إلى تشغيل أمر يسمح بتنفيذ البرامج النصية غير الموقعة لجلسة shell الحالية:Set-ExecutionPolicy RemoteSigned -Scope Process
سيتم جمع المعلومات باستخدام Get-WmiObject -Class win32 بشكل أساسي ، كل شيء بسيط ، يعمل مع الحلقات.سوف نستخدم:- Get-WmiObject -Class win32_processor ؛
- احصل على WmiObject -Class win32_baseboard ؛
- Get-WmiObject Win32_PhysicalMemory ؛
- احصل على قرص مادي ؛
- احصل على WmiObject -Class Win32_ComputerSystem ؛
- الحصول على WmiObject Win32_NetworkAdapter ؛
- Win32_NetworkAdapterConfiguration.
توجد صعوبات بسيطة في تحديد عنوان IP لبطاقة الشبكة النشطة. للقيام بذلك ، نستخدم عامل تصفية NetConnectionStatus - "2" ، بعد أن نأخذ معلومات عنوان mac من فئة Win32_NetworkAdapter وعنوان IP من فئة Win32_NetworkAdapterConfiguration ودمجها في طلب واحد: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
للحصول على معلمات الشبكة عن طريق MACAddress لبطاقة الشبكة النشطة ، نقرأ أيضًا Win32_NetworkAdapterConfiguration.يوجد أدناه برنامج نصي.
$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
}