首页 > 解决方案 > 从 Powershell 中 Get-Item 的输出中获取字符串的一部分

问题描述

我的powershell命令如下

$BUILD_SOURCEVERSIONMESSAGE= (Get-Item Env:\BUILD_SOURCEVERSIONMESSAGE) 

以这种格式返回输出

2018-10-26T01:08:44.7409834Z BUILD_SOURCEVERSIONMESSAGE     Merge 569594f057e2c4bd0320159855e81e14216ca66f into 41107d0f0db5ef2986831db2182280e0c...

我正在尝试从上面的输出中解析字符串569594f057e2c4bd0320159855e81e14216ca66f

我尝试将输出转换为字符串,将其拆分为空格,然后访问数组的第二个元素,如下所示。但是,我得到空字符串。如何访问所需的字符串?

echo $BUILD_SOURCEVERSIONMESSAGE
$out = $BUILD_SOURCEVERSIONMESSAGE | Out-String
$out1 = $out.split()
echo $out1[1]

标签: powershell

解决方案


命令的简明等价物Get-Item Env:\BUILD_SOURCEVERSIONMESSAGE——即检索环境变量的值BUILD_SOURCEVERSIONMESSAGE——是表达式$env:BUILD_SOURCEVERSIONMESSAGE

使用 Powershell-split运算符的一元形式,它通过任何非空的空白运行分割输入(同时剥离前导和尾随空白),您可以获得所需的输出,如下所示:

PS> (-split $env:BUILD_SOURCEVERSIONMESSAGE)[3]
569594f057e2c4bd0320159855e81e14216ca66f

索引通过3提取由标记化产生的第 4 个-split标记。


如果要对结果使用字符串插值:

$prefix = 'before<'; $postfix = '>after'
$val = (-split $env:BUILD_SOURCEVERSIONMESSAGE)[3]

# Output a synthesized string that applies a pre- and postfix, using
# {...} to enclose variable names to avoid ambiguity.
"${prefix}${val}${postfix}"

以上产生:

before<569594f057e2c4bd0320159855e81e14216ca66f>after

推荐阅读