powershell - 如何使用拆分和子字符串以及 foreach 处理数组
问题描述
如何使用拆分处理数组substring
并foreach
输出以下信息。
我尝试过拆分和substring
. 但还是不行。谢谢。
$item=$item.ToString()
$driveID=$item.Substring(0,26)
$ID=($driveID.Split(":")[-1]).trim()
$status=$item.Substring(27,$item.Length-1-27)
$stauts1=($status.split(",")[-1]).trim()
输入【数组】:
physicaldrive 1I:1:9 (port 1I:box 1:bay 9, SAS HDD, 900 GB, OK)
physicaldrive 1I:1:10 (port 1I:box 1:bay 10, SAS HDD, 900 GB, OK)
physicaldrive 1I:1:11 (port 1I:box 1:bay 11, SAS HDD, 2.4 TB, OK, spare)
physicaldrive 1I:1:12 (port 1I:box 1:bay 12, SAS HDD, 900 GB, OK, shared spare)
预期输出:
DriveID DriveStatus
9 OK
10 OK
11 OK
12 OK
解决方案
以下假定DriveID
为单词后的数字bay
。代码抓取命名的捕获组并使用它们来制作 PSCustomObject。然后发送到$DriveInfo
集合,最后显示在屏幕上。那时您可以轻松地将其导出。[咧嘴笑]
#region >>> fake reading in a text file
# in real life, use Get-Content
$InStuff = @'
physicaldrive 1I:1:9 (port 1I:box 1:bay 9, SAS HDD, 900 GB, OK)
physicaldrive 1I:1:10 (port 1I:box 1:bay 10, SAS HDD, 900 GB, OK)
physicaldrive 1I:1:11 (port 1I:box 1:bay 11, SAS HDD, 2.4 TB, OK, spare)
physicaldrive 1I:1:12 (port 1I:box 1:bay 12, SAS HDD, 900 GB, OK, shared spare)
'@ -split [System.Environment]::NewLine
#endregion >>> fake reading in a text file
$DriveInfo = $InStuff.ForEach({
$Null = $_ -match '^.+:bay (?<DriveID>\d+), .+b, (?<Status>.+).+$'
[PSCustomObject]@{
DriveID = $Matches.DriveID
Status = $Matches.Status.Split(',')[0]
}
})
$DriveInfo
输出 ...
DriveID Status
------- ------
9 OK
10 OK
11 OK
12 OK
推荐阅读
- javascript - Mocha - 如何测试未解决的承诺?
- matlab - 如何从特定单词中读取 Matlab 中的 txt
- sql - 存储过程 PRINT 每一行的值
- android - CircleCI 2.0 Android Espresso 没有找到配置并且没有测试错误
- c# - 忽略来自 linq 查询的空或空结果
- ios - iPhone IOS 蓝牙名称 Fleet Vehicles Ford SYNC
- git - git rebase 和 git reset 的区别
- php - PHP SoapClient - 使用变量创建请求
- c# - 在 Xamarin API 中向用户显示消息
- java - 从 Android 的 WebView 中的 Blob Url 下载 PDF 文件