我在配置文件(sample.cfg)中有以下内容,
Time_Zone_Variance(Mins):300
Alert_Interval(Mins):2
Server:10.0.0.9
Port:1840
我尝试在PowerShell中使用:
在split
之后存储每个值。但是我无法产生需要的输出。
有人可以告诉我如何使用PowerShell split
解决上述问题吗?
答案 0 :(得分:9)
您可以使用Get-Content
读取文件的内容,然后通过ForEach-Object
管道每一行,然后在每一行使用split命令,获取数组中的第二项,如下所示:
$filename = "sample.cfg"
Get-Content $filename | ForEach-Object {
$_.split(":")[1]
}
<强>输出强>
300
2
10.0.0.9
1840
<强>更新强>
我更喜欢@AnsgarWiechers的方法,但是如果你真的需要专门命名的值,你可以创建一个哈希表并用值替换名称:
$configValues = @{
hour = "Time_Zone_Variance(Mins)"
min = "Alert_Interval(Mins)"
server = "Server"
port = "Port"
}
Get-Content $filename | ForEach-Object {
# Courtesy of Ansgar Wiechers
$key, $value = $_ -split ':', 2
foreach($configValuesKey in $($configValues.keys)) {
if ($configValues[$configValuesKey] -eq $key)
{
$configValues[$configValuesKey] = $value
}
}
}
write-host "`nAll Values:"
$configValues
write-host "`nIndividual value:"
$configValues.port
<强>输出强>
All Values:
Name Value
---- -----
port 1840
min 2
server 10.0.0.9
hour 300
Individual value:
1840
答案 1 :(得分:4)
我想你不想分割线条,但实际上是创建键/值对。这可以这样实现:
$config = @{}
Get-Content 'C:\path\to\sample.cfg' | % {
$key, $value = $_ -split ':', 2
$config[$key] = $value
}
您还可以使用ConvertFrom-StringData
cmdlet:
Get-Content 'C:\path\to\sample.cfg' | % {
ConvertFrom-StringData ($_ -replace ':','=')
}
-replace
操作是必要的,因为ConvertFrom-StringData
期望键和值由=
分隔。如果您可以将配置文件中的分隔符从:
更改为=
,则可以使用ConvertFrom-StringData $_
而无需替换。
答案 2 :(得分:4)
这是怎么回事?
json = [{"sydneyTomelbourn":500$},
{"sydneyToHampshre":100$},
{"sydneyToUSA":200$}
]
答案 3 :(得分:1)
对于更简洁的语法,这也可以解决问题:
((Get-Content "your-file.txt") -Split ":")[1]
因此,使用-Split
方法的诀窍是让String
返回Get-Content
对象(实际上也可以使用别名cat
),并从由此产生的String[]
对象,您可以使用方括号提取第n
个项目。
注意:,由于
-Split
不是该命令的参数名称,因此无法在Get-Content
周围加上括号的情况下使用-Split
不会起作用... ?♂️