尝试从的输出设置powershell监视器的维护模式值./repcli status
:
这将返回一个很长的值列表,我将尝试返回维护模式的状态[disabled]
或[enabled]
感兴趣线如下所示,例如:
Maintenance mode = [enabled]
我想确定感兴趣的行包含[enabled]
还是[disabled]
,在前一种情况下返回1
,在后一种情况下返回0
。
我尝试了:
./repcli.exe status | out-string | select-string -pattern 'maintenance'
这将返回 * all * 输出行,这不是我想要的。
1条答案
按热度按时间fivyi3re1#
请尝试以下操作:
请注意
-match
运算符的使用,由于它是基于regex的,因此需要使用\
对[
和]
进行转义,以便按字面意思使用。Select-String
也使用正则表达式,除非您传递-SimpleMatch
。至于你所尝试的:
Out-String
(不带-Stream
)返回一个 * 单个 * 字符串,由./repcli.exe
调用输出的 * 所有 * 行组成。Select-String
找到匹配项,它将返回 * 整个字符串 *,而不仅仅是找到模式的那一行。Out-String
调用来避免这个问题,因为PowerShell * 自动地 * 将调用的输出行 * 逐行 * 中继到外部程序。Select-String
只返回 * matching lines *,但注意它并不直接返回,而是将它们 Package 在Microsoft.PowerShell.Commands.MatchInfo示例中,这些示例伴随着.Line
属性中的实际行文本,并带有关于匹配的元数据。| ForEach Line
,或者仅在PowerShell(Core)7+中添加-Raw
开关以仅获取 * 行文本 *。