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' Free Bulk Import Tool
Import users from a spreadsheet. Just provide a list of the
users with their fields in the
top row, and save as .csv file. Then launch this FREE utility and match
your fields with AD's
attributes, click to import the users. Optionally, you can
provide the name of the OU where the new accounts will be born.
There are also two bonus tools in this free download, and all 3 have been approved by Microsoft:
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 which is better for your situation.
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
Clear-Host Get-Help About_foreach
»
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 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 one of the hidden
treasures of Microsoft operating systems.
Fortunately, SolarWinds
have created the
Free WMI Monitor so that you can actually see and understand these gems of
performance information. Take the guess work out of which
WMI counters to use for applications like Microsoft Active Directory,
SQL or Exchange Server.