我是一个c-shell家伙所以我正在努力学习powershell。我有以下文件:
环境:生产
服务器:3
用户:25
节点:20
环境:alpha
服务器:4
用户:21
节点:19
等
我想检查一下,如果左边的第一个值是“Environment”,那么我将变量存储在右边的值 - “Production”中,然后从那里存储每个后续的左/右对,直到我点击下一个“环境”,我将存储下一个值。
我无法使用ForEach-Object使我的regexp powershell工作。
答案 0 :(得分:1)
你不应该需要正则表达式......
$servs = @()
get-content file.txt | % {
$split = $_ -split ":"
if($split[0].trim() -eq "Environment"){
$obj = New-Object System.Object
$obj | Add-Member -type NoteProperty -name $split[0] -value $split[1].trim()
}
elseif($split[0].trim() -eq "Nodes"){
$obj | Add-Member -type NoteProperty -name $split[0] -value $split[1].trim()
$servs += $obj
}
elseif($split -ne $null){
$obj | Add-Member -type NoteProperty -name $split[0] -value $split[1].trim()
}
}
现在,您应该在$servs
中拥有一组自定义对象,如下所示:
Environment Servers Users Nodes
----------- -------- ------ ------
production 3 25 20
alpha 4 21 19
答案 1 :(得分:0)
另一种可能性,因为它似乎是格式良好的数据:
(@'
Environment: production
Servers : 3
Users : 25
Nodes : 20
Environment: alpha
Servers : 4
Users : 21
Nodes : 19
'@).split("`n") |
foreach {$_.trim()} |
set-content test.txt
get-content test.txt -ReadCount 4 |
foreach {
new-object psobject -property (convertfrom-stringdata ($_.replace(':','=') -join "`n"))
} | ft -auto
Environment Users Nodes Servers
----------- ----- ----- -------
production 25 20 3
alpha 21 19 4