這很簡單...爲什麼第一個命令工作,第二個不行?(powershell)選擇字符串與Findstr
Findstr在我看來最好的使用「DOS」命令而不是PowerShell。
Get-AppXProvisionedPackage -online | findstr ^DisplayName
Get-AppXProvisionedPackage -online | Select-String -pattern "DisplayName"
PowerShell的新手:)
這很簡單...爲什麼第一個命令工作,第二個不行?(powershell)選擇字符串與Findstr
Findstr在我看來最好的使用「DOS」命令而不是PowerShell。
Get-AppXProvisionedPackage -online | findstr ^DisplayName
Get-AppXProvisionedPackage -online | Select-String -pattern "DisplayName"
PowerShell的新手:)
findstr
是一個操作系統的可執行文件(實際上findstr.exe
),你可以在PowerShell中看到:
Get-Command findstr
輸出:
CommandType Name Version Source ----------- ---- ------- ------ Application findstr.exe 10.0.10... C:\WINDOWS\system32\findstr.exe
Select-String
相似,但功能更強大,是土生土長的PowerShell命令
CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Select-String 3.1.0.0 Microsoft.PowerShell.Utility
他們不工作完全一樣,雖然還是採取同樣的輸入。 Select-String
通常更適合在PowerShell中使用,但請查看幫助以瞭解其工作原理。
由於馬蒂亞斯指出的那樣,你在做什麼,你可能想Select-Object
:
Get-AppXProvisionPackage -online |Select-Object DisplayName
PowerShell命令經常與各種屬性返回對象,你可以看到程式化的格式進行顯示,但是你可以以編程方式訪問屬性而不使用字符串解析。 Select-Object
是一種方式,另一種是使用點.
符號:
$pkg = Get-AppXProvisionPackage -online
$pkg.DisplayName
燁...土辦法,最好的辦法:)謝謝 – AnimaliX
兩者都是原生的方式。
就像briantist說的那樣,powershell cmdlet的正常返回是一個對象,它被「精美地」顯示出來。因此findstr將從控制檯獲取該輸出並對其進行過濾。
如果使用Select-String,則試圖匹配字符串「DisplayName」,但Cmdlet的輸入是對象,而不是字符串。
正確的方式做到這一點,(全PowerShell的)應該是:
Get-AppXProvisionedPackage -online | select "DisplayName"
從這個命令,輸出將是第一個cmdlet返回的對象的屬性。如果您需要純字符串,則應對select(Select-Object)Cmdlet使用「-ExpandProperty」參數。
Get-AppXProvisionedPackage -online | select -ExpandProperty "DisplayName"
'GET-AppXProvisionPackage -online |選擇-對象DisplayName' –
如此選擇,對象是:)謝謝 – AnimaliX