Support_38
asked on
extract parts of a file with powershell
good evening
I need to extract parts of a .txt file
I wonder if you can do this with powershell.
The file that I need to read is attached, I need only extract this information as follows:
Server Blade #1 Information:
Product Name: ProLiant BL460c Gen8
Serial Number: BRC31939CV
Server Name: EBR001001-311
CPU 1: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz (8 cores)
Memory: 262144 MB
#1 EBR001001-311 ProLiant BL460c Gen8 BRC31939CV Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz (8 cores) 262144 MB
thank you
EHP1.txt
I need to extract parts of a .txt file
I wonder if you can do this with powershell.
The file that I need to read is attached, I need only extract this information as follows:
Server Blade #1 Information:
Product Name: ProLiant BL460c Gen8
Serial Number: BRC31939CV
Server Name: EBR001001-311
CPU 1: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz (8 cores)
Memory: 262144 MB
#1 EBR001001-311 ProLiant BL460c Gen8 BRC31939CV Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz (8 cores) 262144 MB
thank you
EHP1.txt
ASKER
Hello
I need to bring dynamic information , these lines are fixed , so just need to bring the information to a text file as it is. shown it. bring line 1, line 5 ...
I need to bring dynamic information , these lines are fixed , so just need to bring the information to a text file as it is. shown it. bring line 1, line 5 ...
This writes the results to the pipeline as custom objects with the properties you want. You can pipe the output through whatever you want, like Format-Table, Format-List, Export-Csv, ...
$InputFile = 'C:\Temp\EHP1.txt'
Switch -regex -File $InputFile {
'\AServer Blade #(?<Blade>\d+) Information:\Z' {
$Result = '' | Select-Object -Property 'Blade', 'ServerName', 'ProductName', 'SerialNumber', 'CPU', 'Memory'
$Result.Blade = $Matches['Blade']
}
'\A\s+Server Name:\s*(?<ServerName>\S+)\s*\Z' {$Result.ServerName = $Matches['ServerName']}
'\A\s+Product Name:\s*(?<ProductName>.*?)\s*\Z' {$Result.ProductName = $Matches['ProductName']}
'\A\s+Serial Number:\s*(?<SerialNumber>\S+)\s*\Z' {$Result.SerialNumber = $Matches['SerialNumber']}
'\A\s+CPU 1:\s*(?<CPU>.*?)\s*\Z' {$Result.CPU = $Matches['CPU']}
'\A\s+Memory:\s*(?<Memory>\d+)\s+.*\Z' {
$Result.Memory = $Matches['Memory']
$Result
}
}
ASKER
Good Morning,
Perfect, the result was the same, very good.
If I need the information in columns, you can do?
So I have both formats.
I appreciate the help
Perfect, the result was the same, very good.
If I need the information in columns, you can do?
So I have both formats.
I appreciate the help
ASKER
This format is possible?
Blade Servername ProductName SerialNumber CPU Memoria
1 EBR001001-011 Prolianr BL460c BRC510671T Intel(R) Xeon(R) CPU... 327680
2 EEC002002-101 ProLiant BL460c Gen8 BRC510671K Intel(R) Xeon(R) ... 262144
Blade Servername ProductName SerialNumber CPU Memoria
1 EBR001001-011 Prolianr BL460c BRC510671T Intel(R) Xeon(R) CPU... 327680
2 EEC002002-101 ProLiant BL460c Gen8 BRC510671K Intel(R) Xeon(R) ... 262144
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank you.
ASKER
Thank you.
ASKER
A final information.
I need to read multiple files automatically in the same directory and generate a single output?
I have 8 files:
EHP1.txt
EHP2.txt
EHP3.txt
...
It's possible ?
I need to read multiple files automatically in the same directory and generate a single output?
I have 8 files:
EHP1.txt
EHP2.txt
EHP3.txt
...
It's possible ?
Now has an additional column "File" with the file name from which the row came from.
$InputFile = 'C:\Temp\EHP{0}.txt'
1..8 | ForEach-Object {
$FileName = $InputFile -f $_
Switch -regex -File $FileName {
'\AServer Blade #(?<Blade>\d+) Information:\Z' {
$Result = '' | Select-Object -Property 'File', 'Blade', 'ServerName', 'ProductName', 'SerialNumber', 'CPU', 'Memory'
$Result.File = [IO.Path]::GetFileName($FileName)
$Result.Blade = $Matches['Blade']
}
'\A\s+Server Name:\s*(?<ServerName>\S+)\s*\Z' {$Result.ServerName = $Matches['ServerName']}
'\A\s+Product Name:\s*(?<ProductName>.*?)\s*\Z' {$Result.ProductName = $Matches['ProductName']}
'\A\s+Serial Number:\s*(?<SerialNumber>\S+)\s*\Z' {$Result.SerialNumber = $Matches['SerialNumber']}
'\A\s+CPU 1:\s*(?<CPU>.*?)\s*\Z' {$Result.CPU = $Matches['CPU']}
'\A\s+Memory:\s*(?<Memory>\d+)\s+.*\Z' {
$Result.Memory = $Matches['Memory']
$Result
}
}
}
ASKER
Very good.
ASKER
Hi
If I need to get information from another block (Management Processor Information:) ex, IP Address, how should I mount the script?
If I need to get information from another block (Management Processor Information:) ex, IP Address, how should I mount the script?
Is your goal to output only the line with the extracted field information, in that order? Did you want to label the columns of the output? Do you want to output tab-delimited fields. Are you looking for the very first entry in the file or are you looking for a particular name. Does it make sense to convert the entire input file to an object collection that can be used elsewhere in PowerShell, or do you just want unlabeled items in an array?