How to use PowerShell foreach
Vložit
- čas přidán 20. 08. 2024
- This video introduces you to using the PowerShell statement foreach for looping through a collection of objects. Not to be confused with Foreach-Object which is covered in a different video, even though the two are very, very similar.
Video on using ForEach-Object
• PowerShell ForEach-Object
Vidoe on using PowerShell Aliases
• PowerShell Arrays Intr...
You can download the PowerShell and CSV file in a zip file from here. sellfy.com/p/1...
For support, training, or more information about PowerShell check out www.boldzebras.com
No article on the whole Internet has explained the ForEach as good as this video Shane, please please keep them coming.
I am blushing. :)
thank you Simpleton you saved me the time writing the same statement.
thank you Shane!!
I learnt my first foreach script. Thank you
Awesome 🤩
what really helped me was how you really took the time to explain how $object variable worked. The way i understood it was basically when you start a foreach statement that tells powershell that whatever the first variable in the parentheses is, is basically the variable to be able to cycle through all the objects in the previously declared variable such as $ourobjectsarray
Glad to help. 😀
You saved my day, listening into first 4 minutes i saw where I made a mistake in my own baked ps1 script. Thanks.
Awesome 😎
Super awesome explanation. Since I have found your videos I have made way and way more progress than from the book alone that I bought. I'll try to put as much of what I learn into actual practice.
Great to hear!
Always informative, compact and good stuff, thanks Shane for sharing your knowledge
Glad to help. 😀
I reversed engineered the foreach command
start of command
$b="6","3","99"
$n=0
while($n -le $b.count){ $h=$b[$n];$n+=1
#do whatever you want below here but anything to do with $n. Basically don't mess with $n.
echo $h
} #end of foreach loop
#everything below here is necessary to make sure that there are no unnecessary variables left.
$n=$null
$h=$null
End of command
Output:
6
3
99
the foreach equivalent of this:
$b="6","3","99"
foreach($h in $b){
echo $h
}
I know it takes a whole lot less using the foreach command in this example, but mine has a whole lot more customization. For example you couldn't have possibly gotten this output from a foreach command easily.
6
99
With mine though, you can do this easily. Just change the $n+=1 to $n+=2 and done.
Thanks for sharing! 😀
Have to say that has finally got for each working in my brain, the whole $object $dog thing really worked, that was the bit I could never figure out
Awesome
thank you for a well explained video. that $object/$dog variable had me pulling my hair off everytime!!
Dogs will do that to you. ;)
One thing I find myself doing is saying in sync with you "And hereeeeeee's our intro'
😍 all these years later I still say it. 🥰
very helpful as always. thank you.
My pleasure!
Amazing videos as usual!
Do you have any powershell series related to directories, files and file servers, permissions...?
This is a great series on powershell. Thank you Shane. Do you have training on Active Directory - RBAC?
Thanks. I don’t do rbac. Sorry b
Awesome video
Thanks
Great Video share, i learn a lot , the easy way ! Wouldn;t be great if you post the link to the powershell you explained to Github or your site,like a blog ? Would be easy to execute and get out exercises !
Replies to other comment
Great Job!!
Thanks. Glad it helped you.
Thanks Shane, great video. Do you have any tutorials that show us how to add a new property/value into an object during a ForEach?
I don’t. Sorry
I'm assuming you've probably figured out how to do that by now.
Your question carries too many assumptions.
But, seems like a good one. I've got an answer for you.
Let's say you want to add a property during a loop. Is it a property that you need to create or index during a loop? If so, that's pretty easy.
You have to create an index array first.
$Item = @( 0..number of entries you want to have )
Then you have to iterate through those indexes to add everything.
Foreach ( $i in 0..( $item.count - 1 ) ) # this sets up a numerical anchor/index to reference within the loop
{ $item[$_] = @{ Property1 = "Value1" ; Property2 = "Value2" ; Property3 = "Value3" } }
This string here will SET those properties, and to reference each one later, you would use "$Item.Property1[0]" , you could also reference it by "$Item[0].Property1", whichever way you prefer.
If you want to ADD to an existing hashtable, then $Item.Add("AddProperty","AddValue")
There are other ways to do that but that seems to be the easiest, at least in my opinion.
I could elaborate more? But this comment is getting a little long winded. Hope this helps.
Hi, thanks. This helped me a lot.
I have an question, i have an similar scenario, i have an method which will invoke an restapi. In the main function i have added the foreach loop with a CSV file while includes two values (.id1 and .id2) which should be passed into rest API request.
I'm getting 502 bad gateway error while doing that.
The same API works fine on postman with collection runner
What Im confused about is the .ojectpropertyname. For some reason that doesnt work for me? is that a property that can go at the end of any alias or does that need to be defined somewhere?
The ".ojectpropertyname" that is after the "$Object" is what your top Columnes are called in your .csv file.(They must be the exact same.)
If you type your $object and then add a "." it should give you a list of things you can choose, here you want that to be what you called the Columnes you need the objects from
Why did you separate the brackets to individual lines between Line 22 and 24?
Hi Shane. First time using Powershell and I need your advice. I have multiple files in a directory I want to create a script that reads in the directory path and for each file in the directory, I want to check if the content of the files have a non ascii character. If there is a non ascii character I want to then write the file name to a output file. I found this scrpt in stackoverflow
$nonASCII = "[^\x00-\x7F]"
foreach ($_ in [System.IO.File]::ReadLines($source)){
if ($_ -cmatch $nonASCII){
write-output $_ | out-File $output -append
}
}
Issue I have is how to I pass the directory and the files to $source?
Save it to a variable? Not sure.
First comment and like! BOOM!
Who dis? ;)
Hi, want help for an CSV file in which a column contains numbers, need to add a add a comment as "compliant" for the numbers between n to n-3, number below n-4 will be tagged "non-compliant".
Suppose if today's latest version is 2111 then the lines with 2111, 2110, 2109, 2108 are compliant & the number below 2107 are non compliant.
Please help.
I am not sure. Sorry
when i did any changes in .ps1 file, those changes not working in first time. if I run again
then working. please solve my issue. i want first time work how?
Not sure. Sorry
Hi
Can you please make some video on working with power shell on Windows 10, and terminate process with domain administrator Rights, when the UAC is enabled through GP.
Can you give me a more detailed explanation of what you are trying to do or maybe share some sample code you are struggling with? I will try to help.
Shane Young
I'm trying to kill the process on Windows 10 machine like winwork.exe. from wmi.
Get-wmiobject - computer name $computername -class win32_process -filter "Name='winword.exe'" | foreach-object {$_.Terminate()}
But it's giving the return value is 2, means Access Denied.
Then I've use the -credential and the administrator account details in user name and password, but no luck.
Please help me.
One small observation from me that if the script running credentials and the process running credentials are same then it's kill that process.
Are you running PowerShell as Administrator? Where you have to right click on the PowerShell icon and select "run as administrator".
We are running that script from Windows 7 machine which is logged in with domain administrator account.
Hi
Can you help me to solve my below problem using powershell
Am having 2 csv file ..eg actual ad expected ...
Actual
Name actualver
Chrome 12.4533.
Fire eye 3.4
Expected
Name expver
Chrome 12.4566
Fire eye 3.4
My expected result is
Name expver status actualver
Chrome 12.4566 differ 12.4533
Fire eye 3.4 nodiffer 3.4
NOt sure. Sorry
So you selected $Dog instead of $Cat. I hope you're happy with that..... ps: from a cat
😻