PS Projects to teach junior employees?

Hi All,

New to the forums; brief intro: been using PowerShell for about the past 4 years - started with the PowerShell in a Month of Lunches, and Don Jones YouTube videos, and now I’ve made API modules, database modules, alerting automation, all sorts of goodness.

I have some co-workers who are just now finding time to start learning PowerShell, instead of doing things through the GUI. I want to foster this hard. To do that, I want to come up with some fun Beginner PowerShell projects they could do. The problem is, I keep thinking up things that would need to use Cim objects, or advanced functions, or a deeper understanding of dotNet than a beginner would have - and they don’t even know what a module is yet.

Does anyone have any good beginner projects? Maybe someone - who’s an even bigger pack-rat than I am - still has their first scripts laying around, and could go into “here’s one that taught me a lot”, etc. The best I was able to come up with was asking them to use Select-Object to grab specific properties, or use Get-ChildItem with the ‘-include’ to introduce wildcards… that being said, one of them was able to copy-paste enough powershell to get logged into Office 365 EXO, and export a CSV of all the mailboxes - though I’m 100% certain he learned very little from doing that, and just copy-pasted example code from docs.microsoft.com.

TL:DR - If you had some Help-desk or Junior admin wanting to learn PowerShell, what PowerShell tasks would you give them? (Assuming you also got to check their code afterwards)

I’m thinking something with active directory? Problem is, it feels like a one step problem to answer. "Get all the users who " – Get-AdUser -f {'’ -eq ‘___’} - you know what I mean?

Probably not a project, but as somone who has been developing in powershell for past 1.5 years, ive learned a lot of good tactics that i wish i knew before, and i would encourage new beginners to keep in mind when developing further with powershell. maybe these tips are some things you could incorporate into potential project for these employees?

  1. splatting
  2. piping
  3. pscustomobject (my favorite!) for nice and organized logging

When I need to help a user I try to get as much information as possible first. Even before I ask for the issue I ask for the username and maybe the computername if these information are not related in a way anyway.

I wrote a little module with some functions for gathering the infromation from the AD and from the computer helping me solving the really simple stuff like locked accounts or something like this.

That could be a nice task for a Help-Desk-Youngling I think. :wink:

Yeah you can’t go wrong with a PC inventory list and after that they can move on to mailing it. There are so many examples of this topic online so they get to learn about all the negatives of just copy/paste.

I took an entire IT team through the month of lunches books for training. The best advice I can give to anyone trying to become proficient, is to stop using the gui’s.

Easiest places to start are Active Directory, and basic server admin/info gathering tasks. Forcing yourself to use the shell instead of the mouse is the only way people become really proficient. Take one task a day, and figure out how to do it in the shell, save the script, rinse and repeat. Avoid using others scripts especially in the beginning as that becomes a crutch, and doesn’t help you learn the logic.

Sure it can be MUCH slower in the beginning, but we all have to start somewhere.

once you gain knowledge and basic skills, the PSKoans can be an awesome way to test, and improve your knowledge.

 

 

 

 

[quote quote=224472]Yeah you can’t go wrong with a PC inventory list and after that they can move on to mailing it. There are so many examples of this topic online so they get to learn about all the negatives of just copy/paste.

[/quote]
Hmm… I feel like any inventory someone does would need to leverage WMI/CIM. While that’s definitely on the list for future learning, I’m still trying to get across “yes, you’re looking at text when this cmdlet runs, but you have to remember it’s an object”. Though I think your suggestion gave me an idea - auditing share permissions, and/or ntfs acl’s. There are direct cmdlets for those, and might help to learn the value of ‘gcm’.

Hmm… so maybe like - some script that returns a psobject like :

$User = New-Object -Type psobject -prop @{
    SamAccountName = $ADUser.SamAccountName
    PasswordLastChanged = $ADUser.PasswordLastSet
    AccountLockedOut = $UserInSearchADAccount_LockedOut #Boolean value from ((Search-ADAccount -LockedOut).SamAccountName -contains $ADuser.SamAccountName)
    ...
}
Is that the kind of thing you're suggesting?
 

[quote quote=224412]Probably not a project, but as somone who has been developing in powershell for past 1.5 years, ive learned a lot of good tactics that i wish i knew before, and i would encourage new beginners to keep in mind when developing further with powershell. maybe these tips are some things you could incorporate into potential project for these employees?

  1. splatting
  2. piping
  3. pscustomobject (my favorite!) for nice and organized logging
[/quote] Hmm... so, I 100% agree with piping, and I definitely think PSObjects are a great way to put together information from various locations into a single item to work with down the pipeline... but I don't know if Splatting is the thing to make a beginners life easier. Maybe I just haven't used it in the same use-cases as you -- where do you think Splatting could have made your life easier when you were a beginner?

 

[quote quote=224676]I took an entire IT team through the month of lunches books for training. The best advice I can give to anyone trying to become proficient, is to stop using the gui’s.

Easiest places to start are Active Directory, and basic server admin/info gathering tasks. Forcing yourself to use the shell instead of the mouse is the only way people become really proficient. Take one task a day, and figure out how to do it in the shell, save the script, rinse and repeat. Avoid using others scripts especially in the beginning as that becomes a crutch, and doesn’t help you learn the logic.

Sure it can be MUCH slower in the beginning, but we all have to start somewhere.

once you gain knowledge and basic skills, the PSKoans can be an awesome way to test, and improve your knowledge.
[/quote]
I 100% agree that not using the GUI is the only real way to make progress, but it’s unfortunately not going to happen for some of these guys :-/ These guys don’t know CIM/WMI, or C# - so whatever tasks they try to script up, it needs to be do-able with the pre-built cmdlets in PS. The problem is:

  1. They don't know what's possible to do with pure PowerShell
  2. I keep thinking of tasks that I would find simple, but would be impenetrable to a complete beginner.
For example, these guys don't have Computer Science degrees - so base things like floats and strings that make perfect sense to us, are still things that require translation to them.

I have never seen PSKoans before. I’m looking at the repo now - and it seems fun. I’ll have to play around with that a bit and see if I can explain it to the juniors.

 

Current Ideas:

  • NTFS ACL Audit Report
  • SMB Share Permissions Audit Report
  • Get-UserInfo Module <# from AD and/or other sources #>

Work on GET operations. Comparison operators lead into data types (e.g. can’t compare a date string to a date). Filter left, use the command to filter from the source, not get everything and filter with WHERE. Building objects with WMI inventories. Explaing HashTable\Arrays. Build objects with New-Object, [pscustombject] and calculated expressions with Select. Show Add-Member, but personally feel that is a deprecated method. Looping, implicit and explicit. There is also a dedicated thread to teaching that you can read thru:

https://powershell.org/forums/forum/open-discussions/teaching-powershell/

I think the best place to start is reading. They can get familiar with using the shell, by using it to read the help. You can provide them a “beginner” list if you think they may be overwhelmed with the amount of help topics. Here are some that should be extremely useful, if not required, to learn.

help about_variables
help about_logical_operators
help about_Arithmetic_Operators
help about_Aliases
help about_PowerShell.exe
help about_PowerShell_Ise.exe
help about_Windows_PowerShell_5.0
help about_Windows_PowerShell_ISE

And naturally they should become very familiar with these core cmdlets right away.

get-help

get-command

get-member

get/set-executionpolicy