Powershell cmdlet 输出上的匹配运算符或管道输出的变量名称?

标签 powershell

我有一个简单的可执行文件,可以运行,返回几行代码。

我需要从该行中取出十六进制的一部分并将其存储在变量中。

我有一些有用的东西,但想让它更干净?还是一行?

输出有几行,我只关心带有十六进制代码的那一行。 典型的返回字符串

Info: Download of filename (0xff77) completed
$test1 = .\some.exe 2>&1 | Select-String -Pattern "0x"
$test1 -match "[0-9a-fA-F]{4}"
$test1 = $Matches[0]

我尝试像这样通过管道传输第一行的输出

$test1 = .\some.exe 2>&1 | Select-String -Pattern "0x" | -match "[0-9a-fA-F]{4}"

显然这不起作用,而且我找不到更好的方法来做到这一点。

有没有办法解决前一个管道的结果并将其传递给匹配命令?

$test1 = .\some.exe 2>&1 | Select-String -Pattern "0x" | $HiddenPrevPipeVar -match "[0-9a-fA-F]{4}"

我希望我的 $test1 等于十六进制代码 ff77

最佳答案

Select-String 为您执行正则表达式匹配:

$test1 =
  (.\some.exe 2>&1 | Select-String -Pattern '(?<=0x)[0-9a-f]+').Matches.Value
  • Select-String输出 Microsoft.PowerShell.Commands.MatchInfo 描述每场比赛的实例及其 .Matches属性包含 System.Text.RegularExpressions.Match 的集合描述正则表达式传递给 -Pattern 的内容的实例匹配。 .Value每个此类实例的属性都包含匹配的文本。

  • 虽然可以在正则表达式中使用捕获组 ( (...) ) 并引用它们通过 .Matches 捕获的内容同样,在这种情况下,使用肯定的后向断言 ( (?<=...) ) 来有效排除 0x 会更简单。来自 .Value 中报道的比赛

  • 另请注意 Select-String与一般的 PowerShell 一样,默认情况下不区分大小写,因此 [a-f]正则表达式中涵盖小写和大写字母。

关于Powershell cmdlet 输出上的匹配运算符或管道输出的变量名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73666512/

相关文章:

powershell - ""您的构建管道引用了 undefined variable ": it' 只是一个 powershell 变量

java - 以编程方式获取 DFS/UNC 信息 - Java

regex - 在 PowerShell 中仅删除 CSV 引号中的逗号

Powershell Copy-Item 不复制

powershell - 根据创建时间搜索文件

testing - 如何使用 powershell 最大化内存使用

excel - Powershell 脚本 - 打开 Excel、更新外部数据、另存为

.net - 电源外壳;即使没有 IPv6,为什么此代码总是返回 'True'?这是错的吗?

powershell - 如何提供 cmdlet 的输入列表

Powershell 类继承行为