iT邦幫忙

2

Python 抓取電腦內的資訊

邦友好,
請問如何利用python抓取電腦內的資訊
電腦名稱、IP、MAC、OS版本、已安裝軟體

目前爬文,有嘗試過利用cmd下指令抓取電腦內的資訊
碰到的問題是,已安裝軟體好像並不會全部列出來

爬文python可以利用wmi這個套件來抓取電腦內的資訊
但一直失敗...不知道是不是版本關係(3.6.8)

有版友有這方面的實務經驗嗎?
目前想利用python抓取這些資料後丟到excel內...自動化去更新區網內的電腦資訊

2
froce
iT邦大師 1 級 ‧ 2019-03-26 11:10:50

建議利用powershell去做這件事比較好,因為是win7以上內建的。
python在windows上要做到這些事還要 import pywin32,除非打包成exe,要不然你得每台電腦裝python和pywin32。
然後pyinstaller以我的經驗,你通常會遇到字碼問題,然後你得自己去改pyinstaller的code。

抓安裝軟體的powershell:

 Get-WmiObject -Class Win32_Product
看更多先前的回應...收起先前的回應...
isuckinfo iT邦新手 5 級 ‧ 2019-03-26 12:14:48 檢舉

您好,請問如何將查詢結果輸出呢?
我使用這個

Get-process | export-csv -path e:\processes.csv –NoTypeInformation

但是它好像是輸出我目前的執行程式有哪些...

froce iT邦大師 1 級 ‧ 2019-03-26 13:00:33 檢舉

= =a

你有沒有覺得你的指令和我的完全不一樣...
Get-process本來就是去抓目前執行序。

Get-WmiObject -Class Win32_Product | export-csv -path e:\processes.csv –NoTypeInformation
isuckinfo iT邦新手 5 級 ‧ 2019-03-26 14:21:41 檢舉

哈,抱歉,前輩
我後來有找到一個指令,它是列出可解除安裝程式,
上面的資料比較單純就是name而已
請問這個指令也可以輸出到csv嗎?

Get-WmiObject -Class Win32_Product -ComputerName .  | Format-Wide -Column 1
froce iT邦大師 1 級 ‧ 2019-03-26 15:17:46 檢舉

| 是管道命令
export-csv -path e:\processes.csv –NoTypeInformation是輸出csv的命令。

管道命令你可以把他當成把結果傳給下一個命令。

Get-WmiObject -Class Win32_Product  | Select-Object -Property Name | export-csv -path e:\processes.csv –NoTypeInformation -Encoding UTF8

解釋起來就是下面這樣,刮號裡是得到的結果:
先得到所有安裝的軟體(得到所有軟體的各個物件) > 選擇軟體裡面name這個屬性(得到所有軟體的name這個屬性) > 輸出CSV(得到CSV)

Powershell對於管windows來說非常好用,我是寫python當主力語言,但遇到要管windows我還是會選擇用Powershell來管理。
去看教學吧。

-ComputerName .

這個參數是可以透過網路去取得資訊,不過應該要經過設定,要取得本機的資訊不用這個參數也可以

isuckinfo iT邦新手 5 級 ‧ 2019-03-26 17:22:55 檢舉

前輩有哪個網站的教學比較齊全可以參考嗎?

isuckinfo iT邦新手 5 級 ‧ 2019-03-26 17:24:25 檢舉

我原本也在摸索python,後來發現powershell更好用...

froce iT邦大師 1 級 ‧ 2019-03-26 18:21:44 檢舉

https://ithelp.ithome.com.tw/articles/10027285
不過這篇有點老了,要注意版本差異,但是基本是通的。

0
garyjuang
iT邦新手 5 級 ‧ 2019-03-27 09:21:05

wmic product list brief

isuckinfo iT邦新手 5 級 ‧ 2019-03-27 14:38:49 檢舉

感謝前輩。

0
petercheung_hk
iT邦新手 5 級 ‧ 2019-03-28 11:12:29

https://gitlab.com/takshing2001/getremotepcinfo/blob/master/GetPCInfo.ps1

# Get Remote System Information

# Shows hardware and OS details from a list of PC

# Last Edit :Peter Cheung 15 March 2019

$ArrComputers =  get-content "C:\scripts\computers.txt"


foreach ($Computer in $ArrComputers) 
{
    $computerSystem = get-wmiobject Win32_ComputerSystem -Computer $Computer
    $computerBIOS = get-wmiobject Win32_BIOS -Computer $Computer
    $computerOS = get-wmiobject Win32_OperatingSystem -Computer $Computer
    $computerCPU = get-wmiobject Win32_Processor -Computer $Computer
    $computerHDD = Get-WmiObject Win32_LogicalDisk -ComputerName $Computer -Filter drivetype=3
        write-host "System Information for: " $computerSystem.Name -BackgroundColor DarkCyan
        "-------------------------------------------------------"
        "Manufacturer: " + $computerSystem.Manufacturer
        "Model: " + $computerSystem.Model
        "Serial Number: " + $computerBIOS.SerialNumber
        "CPU: " + $computerCPU.Name
"HDD Capacity C: " + "{0:N2}" -f ($computerHDD.Size[0]/1GB) + "GB" 
"HDD Capacity D: " + "{0:N2}" -f ($computerHDD.Size[1]/1GB) + "GB" 
"HDD Space C: " + "{0:P2}" -f ($computerHDD.FreeSpace[0]/$computerHDD.Size[0]) + " Free (" + "{0:N2}" -f ($computerHDD.FreeSpace[0]/1GB) + "GB)"
"HDD Space D: " + "{0:P2}" -f ($computerHDD.FreeSpace[1]/$computerHDD.Size[1]) + " Free (" + "{0:N2}" -f ($computerHDD.FreeSpace[1]/1GB) + "GB)"
        "RAM: " + "{0:N2}" -f ($computerSystem.TotalPhysicalMemory/1GB) + "GB"
        "Operating System: " + $computerOS.caption + ", Service Pack: " + $computerOS.ServicePackMajorVersion
        "User logged In: " + $computerSystem.UserName
        "Last Reboot: " + $computerOS.ConvertToDateTime($computerOS.LastBootUpTime)
        ""
        "-------------------------------------------------------"
}

看更多先前的回應...收起先前的回應...
isuckinfo iT邦新手 5 級 ‧ 2019-03-28 11:54:59 檢舉

請問無法順利執行耶,我需要改哪裡嗎?
感謝提供

isuckinfo iT邦新手 5 級 ‧ 2019-03-28 11:58:22 檢舉

抱歉很新手...

建立一個txt文件, 裏面打電腦名稱

$ArrComputers = get-content "C:\scripts\computers.txt" 改成你的txt文件位置

https://ithelp.ithome.com.tw/upload/images/20190328/201153296fBwcYP8HI.png

. 代表本機

isuckinfo iT邦新手 5 級 ‧ 2019-03-28 14:47:58 檢舉

https://ithelp.ithome.com.tw/upload/images/20190328/20115368r0cu1YMEWW.jpg

前輩,我執行後出現這一段...是哪邊出錯嗎...
好像抓不到值?

你有多少個硬盤/分區

isuckinfo iT邦新手 5 級 ‧ 2019-03-28 16:08:38 檢舉

三個本機磁碟,七個網路磁碟

isuckinfo iT邦新手 5 級 ‧ 2019-03-28 16:09:13 檢舉

但是其實只抓C、D就好了

C、D 是二個本機磁碟 還是分區

isuckinfo iT邦新手 5 級 ‧ 2019-03-28 16:36:43 檢舉

https://ithelp.ithome.com.tw/upload/images/20190328/20115368SS9eEEbMWR.jpg

這樣子

我要發表回答

立即登入回答