(powershell) Select-String 与 Findstr
(powershell) Select-String vs 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 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
这将 return 一个具有单个 属性 DisplayName
的新对象。要获取 属性 only 的值,您可以使用:
Get-AppXProvisionPackage -online | Select-Object -ExpandProperty DisplayName
(另见 )
PowerShell cmdlet 通常 return 具有各种属性的对象,您看到的程式化格式是为了显示,但您可以通过编程方式访问属性,而无需使用字符串解析。 Select-Object
是一种方法,另一种是使用点 .
表示法:
$pkg = Get-AppXProvisionPackage -online
$pkg.DisplayName
都是原生方式。
正如briantist所说,powershell cmdlet的常规return是一个对象,显示为"beautifully"。所以 findstr 将从控制台获取该输出并对其进行过滤。
如果您使用 Select-String,您正在尝试匹配字符串 "DisplayName",但 Cmdlet 的输入是对象,而不是字符串。
正确的方法(完整的 powershell)是:
Get-AppXProvisionedPackage -online | select "DisplayName"
从该命令中,输出将是第一个 Cmdlet return 编辑的对象的 属性。如果你想要纯字符串,你应该使用 select (Select-Object) Cmdlet 的“-ExpandProperty”参数。
Get-AppXProvisionedPackage -online | select -ExpandProperty "DisplayName"
这很简单...为什么第一个命令有效而第二个命令无效?
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 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
这将 return 一个具有单个 属性 DisplayName
的新对象。要获取 属性 only 的值,您可以使用:
Get-AppXProvisionPackage -online | Select-Object -ExpandProperty DisplayName
(另见
PowerShell cmdlet 通常 return 具有各种属性的对象,您看到的程式化格式是为了显示,但您可以通过编程方式访问属性,而无需使用字符串解析。 Select-Object
是一种方法,另一种是使用点 .
表示法:
$pkg = Get-AppXProvisionPackage -online
$pkg.DisplayName
都是原生方式。
正如briantist所说,powershell cmdlet的常规return是一个对象,显示为"beautifully"。所以 findstr 将从控制台获取该输出并对其进行过滤。
如果您使用 Select-String,您正在尝试匹配字符串 "DisplayName",但 Cmdlet 的输入是对象,而不是字符串。
正确的方法(完整的 powershell)是:
Get-AppXProvisionedPackage -online | select "DisplayName"
从该命令中,输出将是第一个 Cmdlet return 编辑的对象的 属性。如果你想要纯字符串,你应该使用 select (Select-Object) Cmdlet 的“-ExpandProperty”参数。
Get-AppXProvisionedPackage -online | select -ExpandProperty "DisplayName"