Powershell 字符串与文件中的特定值匹配(忽略其他值)

Powershell 字符串与文件中的特定值匹配(忽略其他值)

我正在尝试编写一个 Powershell 脚本来从 HP RAID 控制器获取状态(使用hpssacli.exe ctrl slot=1 ld all show detail并将其传输到文件中。

我只需要检查是否Status: OK出现在输出中。问题是有多个字符串包含Status: OK

输出.txt

Smart Array P410 in Slot 1
    array A
      Logical Drive: 1
         Size: 10.9 TB
         Fault Tolerance: 5
         Heads: 255
         Sectors Per Track: 32
         Cylinders: 65535
         Strip Size: 256 KB
         Full Stripe Size: 1024 KB
         Status: Interim Recovery Mode
         Caching:  Enabled
         Parity Initialization Status: Initialization Completed
         Disk Name: /dev/sda
         Mount Points: /storage 10.9 TB Partition Number 2
         OS Status: LOCKED
         Drive Type: Data
         LD Acceleration Method: Controller Cache

我尝试运行该命令sls "Status: " .\output.txt但收到 3 个匹配结果:

output.txt:13:         Status: Interim Recovery Mode
output.txt:15:         Parity Initialization Status: Initialization Completed
output.txt:19:         OS Status: LOCKED

有没有办法用 Powershell 进行正则表达式样式匹配,只匹配字符串所在的位置不是一个字符,后跟Status:

答案1

您可以根据输出前仅包含空格的字符串进行匹配

Select-String "(^\s*)Status: " .\output.txt

或者匹配单词 Status 前的 9 个空格。

 Select-String "(^\s{9})Status: " .\output.txt 

相关内容