(powershell)选择字符串与查找字符串



这很简单。。。为什么第一个命令有效,第二个命令无效?

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:WINDOWSsystem32findstr.exe

Select-String类似但功能更强大,是一个本机PowerShell cmdlet

CommandType     Name                                               Version    Source                                   
-----------     ----                                               -------    ------                                   
Cmdlet          Select-String                                      3.1.0.0    Microsoft.PowerShell.Utility

它们的工作方式并不完全相同,也不接受相同的输入。Select-String通常更适合在PowerShell中使用,但请查看帮助以了解其工作原理。

正如Mathias所指出的,对于你正在做的事情,你可能想要Select-Object:

Get-AppXProvisionPackage -online | Select-Object DisplayName

这将返回一个具有单个属性DisplayName的新对象。要获取属性的值,您只能使用:

Get-AppXProvisionPackage -online | Select-Object -ExpandProperty DisplayName

(另请参阅CapitalShinChan的回答(

PowerShell cmdlet通常返回具有各种属性的对象,您看到的样式化格式用于显示,但您可以通过编程方式访问属性,而无需使用字符串解析。Select-Object是一种方式,另一种是使用点.表示法:

$pkg = Get-AppXProvisionPackage -online
$pkg.DisplayName

两者都是原生方式。

正如briantist所说,powershell cmdlet的定期返回是一个对象,它被"漂亮地"显示。所以findstr将从控制台获取输出并对其进行过滤

如果使用SelectString,则试图匹配字符串"DisplayName",但Cmdlet的输入是对象,而不是字符串。

正确的方法是:

Get-AppXProvisionedPackage -online | select "DisplayName"

从该命令中,输出将是第一个Cmdlet返回的对象的属性。如果您想要纯字符串,您应该对select(select Object(Cmdlet使用"-ExpandProperty"参数。

Get-AppXProvisionedPackage -online | select -ExpandProperty "DisplayName"

相关内容

  • 没有找到相关文章

最新更新