PowerShell Foreach-Object Cmdlet
Looping is a core method for scripting. About the only topic of confusion in PowerShell is that between the ForEach operator and the Foreach-Object cmdlet.
In a nutshell if you need pipelining study this page. If you want a quick easy method study the simple PowerShell loops here.
My mission on this page is to give you simple examples on how to master the PowerShell ForEach pipeline loop. As you become more proficient in PowerShell, so the instructions grow in complexity.
Topics for PowerShell's Foreach-Object Cmdlet
The Foreach-Object cmdlet specializes in controlling loops that accept pipeline input. Another of this cmdlet's interesting features is the -Begin and -End parameters.
The purpose of this script is to interrogate the Windows System event log, and then save the results to a file.
# PowerShell Foreach-Object
Note 1: The key is element is piping the output from $Logs into the Foreach-Object cmdlet. The script then extracts the $_.message from each item and writes it into a file.
Note 2: To check my logic, you may wish to amend the values for $LogPath and $LogType to suit your computer.
Note 3: To see the contents of the file remove the '#' from the last line.
This is how I discovered the -Begin and -End parameters for this cmdlet.
Note 4: The Foreach-Object has this alias: % (Percent sign)
# Foreach-Object -Begin and -End
Note 5: Observe how the -Begin and -End parameters write date stamps.
LEM will alert you to problems such as when a key application on a particular server is unavailable. It can also detect when services have stopped, or if there is a network latency problem. Perhaps this log and event management tool's most interesting ability is to take corrective action, for example by restarting services, or isolating the source of a maleware attack.
Yet perhaps the killer reason why people use LEM is for its compliance capability, with a little help from you, it will ensure that your organization complies with industry standards such as CISP or FERPA. LEM is a really smart application that can make correlations between data in different logs, then use its built-in logic to take corrective action, to restart services, or thwart potential security breaches - give LEM a whirl.
My take on the debate between the simple foreach operator and the more sophisticated Foreach-Object cmdlet is this: if in doubt start with plain foreach. However, if you need piping, then stick progress to the cmdlet with 'Object' in its name. If execution speed is important, then read-up on foreach in PowerShell 3.0.
# Comparison of PowerShell foreach operator with the Foreach-Object
Note 6: This script uses Measure-Command to compare PowerShell's two looping techniques. See more on $_.property.
Conclusion: If there is a choice, then the plain ForEach - the one that uses the 'in' - is much faster than the ForEach-Object cmdlet.
For More Information about Foreach Loops - Check About_Foreach
In a nutshell, the Foreach loop) is designed for iterating through a series of values in an array.
Summary of PowerShell Foreach-Object Cmdlet
The secret of understanding the PowerShell foreach-object is to focus on piping. Also observe that the plain foreach statement contains 'in'. Finally, the ForEach-Object cmdlet has parameters such as -Begin.
If you like this page then please share it with your friends
See more Windows PowerShell examples
Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.