I'm looking to use Powershell to automatically tweak some 'Max' values in a text configuration file. The configuration file looks something like this (but contains around 200 entries).
ChannelName = ItemA
Min = 0.0
Max = 100.0
Units = Deg C
ChannelName = ItemB
Units = Deg C
Min = 0.0
OtherItem1 = 123
OtherItem2 = 456
ChannelName = ItemC
Units = Deg C
Min = 0.0
Max = 100.0
It should be noted that,
- Whilst all ChannelNames should each have an associated 'Max' entry with them, some may not if people have incorrectly manually edited this file in the past
- The 'Max' entry is not always in the same place after the channel name so we are unable to count down X lines after finding the channel name we are interested in
I appreciate that I have not included some proper example code but as a newbie I can't get anything to work and hence reaching out for help. I would like the code to work as follows,
EXAMPLE TASK: Set 'Max' value of 'ItemB' to a value of 200
Get-Content "C:\ConfigFile.txt"
Scan down text file looking for 'ItemB'
Error message if Item B not found and exit
If ItemB is found, continue down the list until either 'ChannelName' or 'Max' is found
If a 'ChannelName' entry is found first, 'ItemB' is missing its 'Max' entry - Error message and exit
If a 'Max' entry is found first, set 'Max' to equal 200
We need to ensure proper error checking is in place to ensure the 'Max' value of ItemC does not get incorrectly changed to 200 as the 'Max' value of ItemB is missing in this example.
This is one approach.
Read the file in as single, multiline string and split on the empty newlines to get an array of 'Channel' textblocks.
Loop through the blocks and if the block is for Channel 'ItemB', check if there is a Max value. If not, add it to the block.
Finally, join the textblocks with two newlines again and write to file
Output:
If you want to add a Max value everywhere it is missing in the file, just change the for loop to
Regex details:
(?m)^ChannelName\s+=\sItemB\s$
(?m)^Max