从Powershell中Get-Item的输出中获取字符串的一部分

时间:2018-10-26 01:18:23

标签: powershell

下面的我的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]

1 个答案:

答案 0 :(得分:2)

命令Get-Item Env:\BUILD_SOURCEVERSIONMESSAGE的简洁形式-即检索环境变量BUILD_SOURCEVERSIONMESSAGE的值-为表达式$env:BUILD_SOURCEVERSIONMESSAGE

使用Powershell的-split运算符的一元形式,将输入按任何非空的空白行进行拆分(在剥离前导和尾随空白时),您可以按以下方式获得所需的输出:

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

索引3提取通过-split进行令牌化后得到的第4个令牌。


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

$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