• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 73
  • Last Modified:

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
0
Support_38
Asked:
Support_38
  • 8
  • 3
1 Solution
 
jmcgOwnerCommented:
It can be done, but your question is a little under-defined for actually writing a 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?
0
 
Support_38Author Commented:
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 ...
0
 
oBdACommented:
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
	}
}

Open in new window

1
Making Bulk Changes to Active Directory

Watch this video to see how easy it is to make mass changes to Active Directory from an external text file without using complicated scripts.

 
Support_38Author Commented:
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
0
 
Support_38Author Commented:
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
0
 
oBdACommented:
As I said: you can use anything that PS offers in terms of formatting, or you can use Export-Csv to process that further in Excel or wherever.
For a formatted table, use Format-Table; this should fit into a standard 120 character wide PS console:
.\Whatever.ps1 | Format-Table -AutoSize

Open in new window

0
 
Support_38Author Commented:
Thank you.
0
 
Support_38Author Commented:
Thank you.
0
 
Support_38Author Commented:
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 ?
0
 
oBdACommented:
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
		}
	}
}

Open in new window

0
 
Support_38Author Commented:
Very good.
0
 
Support_38Author Commented:
Hi

If I need to get information from another block (Management Processor Information:) ex, IP Address, how should I mount the script?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Improved Protection from Phishing Attacks

WatchGuard DNSWatch reduces malware infections by detecting and blocking malicious DNS requests, improving your ability to protect employees from phishing attacks. Learn more about our newest service included in Total Security Suite today!

  • 8
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now