簡體   English   中英

Powershell-過濾命令輸出

[英]Powershell - filtering output of command

我對Powershell還是很陌生,但是我已經做了大量的批處理腳本編寫(是為了進入“現在!”)。 我試圖將我在批處理腳本方面的最大成就重新寫到powershell中,而馬上我碰到了一點困難。

我最初的批處理腳本所做的是為所有檢測到的系統硬件安裝驅動程序。 它通過運行devcon.exe並在輸出中進行搜索,查找VEN_&DEV_並嘗試將其與比較進行匹配來做到這一點。 在速度較慢的計算機(i3 / Atom /速度較慢的AMD)上,這花費了一些時間。

我在Powershell中偶然發現了以下命令:get-wmiobject -class CIM_VideoController PNPDeviceID

它彈出一個列表,其中僅包含顯示適配器上的一些信息。 我特別想要的行是PNPDeviceID。 到目前為止,我還沒有找到一種方法來操縱輸出以僅列出VEN_數字,因此運氣不佳。 這是我想做的:運行上面的命令,對其進行操作,以便僅將供應商編號放入一個變量,將設備編號放入另一個變量。 我嘗試這樣做:

get-wmiobject -class CIM_VideoController PNPDeviceID | Select-String -Pattern "PNPDeviceID" -SimpleMatch

我遇到的問題是,它根本不會吐出任何東西。 我也對如何操縱該行的輸出一無所知,進一步只給了我'VEN_'或'DEV_'的4位數字標識符。

有人知道該怎么做嗎?

您可以這樣做:

$deviceID = (get-wmiobject -class CIM_VideoController).PNPDeviceID

這些對象的輸出始終存儲在一個屬性中,您可以通過點表示法對其進行訪問

我的意思是不尊重,但這是非常基本的東西。 您是否考慮過尋找一本書(甚至是在線書籍)並在PowerShell上閱讀? 我聽說過一個月的午餐學習PowerShell。

對於您的請求,要獲取四位數的ID,您可以將該屬性的值通過管道傳遞給正則表達式匹配項,然后輸出該匹配項。 可以這樣完成:

$VidCardID = get-wmiobject -class CIM_VideoController PNPDeviceID | Where{$_.PNPDeviceID -match "VEN_(\d{4})"} | ForEach{$Matches[1]}

這會將$VidCardID設置為視頻卡的4位ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM