system
September 12, 2017, 10:08am
1
Hello I have a .properties file containing the following lines :
env.servers.list.id=1 2
env.server.1.type=STANDALONE
env.server.1.host=serv1
env.server.1.port=1234
env.server.1.conntype=SOAP
env.server.1.virtualhost=srv1.example.com
env.server.1.servername=jvm1
env.server.2.type=STANDALONE
env.server.2.host=serv2
env.server.2.port=5678
env.server.2.conntype=SOAP
env.server.2.virtualhost=srv2.example.com
env.server.2.servername=jvm3
I’d like to manipulate the data as objects.
For now, I have this :
$Configuration = (Get-Content “C:\tmp\test.properties” ) | ConvertFrom-StringData
$Configuration
Name Value
env.servers.list.id 1 2
env.server.1.type STANDALONE
env.server.1.host serv1
env.server.1.port 1234
env.server.1.conntype SOAP
env.server.1.virtualhost srv1.example.com
env.server.1.servername jvm1
env.server.2.type STANDALONE
env.server.2.host serv2
env.server.2.port 5678
env.server.2.conntype SOAP
env.server.2.virtualhost srv2.example.com
env.server.2.servername jvm3
Could you help me go further please ?
What is the final output you’re trying to accomplish? Based on the file data you’ve provided, can you draw it out for us?
system
September 13, 2017, 5:27am
3
Hello
I don’t know yet how I’ll go through this, but I would like to get something like
foreach $serverlist # using id 1 and 2 in this case
{
Write-Host "Servername : $host; VirtualHost : $virtualhost
}
Thanks for your help
system
September 13, 2017, 5:29am
4
Sorry, forgot the waited output :
Servername : serv1; VirtualHost : srv1.example.com
Servername : serv2; VirtualHost : srv2.example.com
Using the original file data you posted, I found this to work. This code assumes that, in the data file, the ServerName & VirtualHost keys/values are always in pairs.
env.server.1.virtualhost=srv1.example.com
env.server.1.servername=jvm1
…
env.server.2.virtualhost=srv2.example.com
env.server.2.servername=jvm3
$Configuration = (Get-Content "c:\data\file.txt" ) | ConvertFrom-StringData
ForEach($Line in $Configuration)
{
If($Line.Keys -like "*servername")
{
$ServerName = $Line.Values
}
If($Line.Keys -like "*virtualhost")
{
$VHostName = $Line.Values
}
If($ServerName -And $VHostName)
{
Write-Output "ServerName = $ServerName; VirtualHost = $VHostName"
Remove-Variable ServerName,VHostName
}
}
ServerName = jvm1; VirtualHost = srv1.example.com
ServerName = jvm3; VirtualHost = srv2.example.com
If you want the data in a table format instead, you can create a new PSObject object and add the data to it, so you’d get:
ServerName VirtualHost
----------- ------------
jvm1 srv1.example.com
jvm3 srv2.example.com
Hope that helps.