Looping is 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 loop. As you become more proficient in
PowerShell, so the instructions grow in complexity.
The Foreach-Object cmdlet specializes in controlling loops which accept
pipeline
input. Another of this cmdlet's interesting features is the -begin and -end
parameters.
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 4:
Observe how the -begin and -end parameters write date stamps.
Guy Recommends: SolarWinds' Log & Event Management Tool
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 with the cmdlet. If execution speed is important,
then
read-up on foreach in PowerShell
3.0.
Speed Comparision
It surprised me that the simple foreach operator was an order of
magnitude faster than the Foreach-Object cmdlet.
# Comparision of PowerShell foreach operator and Foreach-object
cmdlet Clear-Host $BigNum = 1..10000 $GuyMuliplier = 7777
Write-Host "Foreach operator. Note command uses word 'in'."
Measure-Command {foreach($item in $BigNum) {$item*$GuyMultiplier}} `
| Format-Table Milliseconds -auto Write-Host "Foreach-Object Cmdlet.
In the code, note the pipe" Measure-Command {$BigNum | Foreach {$_ *
$GuyMultiplier} } ` | Format-Table Milliseconds -auto
Note 5: This script uses Measure-Command to compare
PowerShell's two looping techniques.
See more on $_.property.
For Even More Information about Foreach Loops - Check About_Foreach
The secret of understanding the PowerShell foreach-object is to focus
on piping. Also observe that the plain foreach statement contains 'in'.
Finally, the cmdlet has parameters such as -begin.
If you like this page then please share it with your friends
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.
Windows Management Instrumentation (WMI) is
most useful for PowerShell scripting.
SolarWinds
have produced this
Free WMI Monitor to take the guess work out of which
WMI counters to use for applications like Microsoft Active Directory,
SQL or Exchange Server.