2016-09-26 64 views
2

我已经与输出类似下面的变量:搜索从一个变量并打印3行的字符串它上面

Volume 1 
logical disk tag = 0x207e799987 
Name = test 
disk state = OFF

我可能有100卷,但该变量仅返回状态的磁盘“OFF”。

$chk = "some command" 
$off = "some command" 
$offChk = $Chk | Select-String -Pattern $off -Context 1 

我试图将每个“失败/关闭”磁盘的“逻辑磁盘标记”推送到另一个数组中。

对此有任何提示吗?

回答

3

您已经在使用-Context参数,但您必须将值更改为3,0,这意味着您捕获匹配点上方的3行和下方的零点。然后你必须访问的上下文:

(Select-String -Path 'yourFilePath' -Pattern 'disk state = OFF' -Context 3,0).Context.PreContext 
+0

非常感谢马丁!之前尝试过“-Contect 3,0”。 'Context.PreContext'帮助!它会打印除搜索字符串以外的上述2行。看起来不错。我正在检查是否只能打印逻辑磁盘标签,或者至少整个行以'逻辑磁盘标签'开头 – jes

+0

欢迎您。只需在该行添加'-replace('=。*')'来获得输出结果。请考虑接受答案。 –

+0

$ diskTag =(($ CHK |选择字符串-pattern $关闭-Context 3,0).Context.PreContext -replace( '= *')))[1] 该命令给出输出“逻辑磁盘标签'。以前从未使用过正则表达式。您能否让我知道打印标签号码的正则表达式?谢谢! :) – jes

相关问题